Ist es möglich, benutzerdefinierte Umgebungsvariablen an den Docker-Container zu übergeben?

Einige Client-Bibliotheken, wie z. B. GitHub - googleapis/google-auth-library-ruby: Google Auth Library for Ruby · GitHub, verlangen, dass die Authentifizierungsdaten als Umgebungsvariablen festgelegt werden. Ist es möglich, sie über die yml-Datei zu übergeben?

Ich habe Folgendes versucht:

  1. Hinzufügen von export VAR=VALUE im Abschnitt für benutzerdefinierte Befehle der yml-Datei.
  2. Hinzufügen von VARIABLE: VALUE im Abschnitt env der yml-Datei.

@merefield hat mir darauf hingewiesen, dass dies tatsächlich möglich ist.

Füge im Abschnitt für benutzerdefinierte Befehle Folgendes hinzu:

# Fügt die Variable der .bashrc-Datei hinzu
exec: echo 'export VAR=value' >> ~/.bashrc
...
# Lädt die Datei neu
exec: source ~/.bashrc

Ich kann bestätigen, dass dieser Ansatz tatsächlich funktioniert. :slight_smile:

p.s.
Auf irgendeine Weise aktualisiert source ~/.bashrc die Umgebung nicht. Vielleicht wird es zu früh aufgerufen.

Auch versucht:
- exec: /bin/bash -c "source ~/.bashrc"

Kannst du dafür nicht den env:-Abschnitt der Container-Definition verwenden? Das sollte eine Umgebungsvariable erstellen, auf die die Rails-App zugreifen kann.

Also so:

env:
  CUSTOM_ENV: "value"

Andernfalls scheint es, als würde pups bereits Umgebungsvariablen auf dem Host weiterleiten.

Das führt bei mir zu einem Fehler im Zusammenhang mit Docker. Es wäre sehr intuitiv, wenn es so funktionieren würde. :slight_smile: Oder ich spinne. Ich glaube, es gibt eine Regel, benutzerdefinierte Variablen zu akzeptieren, die mit DISCOURSE_ beginnen.

Ich werde es morgen, wenn ich an meinem Schreibtisch sitze, noch einmal mit der Umgebungsvariablen versuchen.

Also, ich war verrückt. Das funktioniert einwandfrei. Das Problem lag an einem mehrzeiligen Wert. Ich habe ihn entfernt und der Build war erfolgreich. Aber die Frage ist: Wie verwendet man mehrzeilige Werte?

Yuhoo, ich habe es zum Laufen gebracht. Das Problem war, dass ich einen RSA-Private-Schlüssel als Umgebungsvariable verwendet habe. So muss man vorgehen, damit das funktioniert:

Packe deinen Schlüssel in einfache Anführungszeichen '' und füge bei jedem \n, das im Schlüssel vorkommt, ein zusätzliches \ hinzu. Das heißt, \n wird zu \\n.

Nur zur Info: Es gibt einfachere Wege, dies zu tun, als alle \n direkt zu aktualisieren.

So etwa:

key: |
  ---BEGIN SECRET KEY---
  SHH, lies das nicht, das ist geheim
  ---END SECRET KEY---

Meinst du, den mittleren Teil des Schlüssels so einzufügen, wie er ist? Das wäre etwas sauberer.

Ich meine, dass YAML ab dem Zeichen | (und optionalen Varianten) die Unterstützung für mehrzeilige Werte bietet.

Sie können den Schlüssel dann unverändert einfügen (abgesehen von vorangestellten Leerzeichen).

Ich habe einen albernen Versuch gewagt: Ich habe | und eine echte neue Zeile anstelle jedes \n eingefügt, was leider nicht funktioniert hat.