Umgebungsvariablen
Mit Umgebungsvariablen können Sie jede verfügbare Konfigurationsoption überschreiben.
Sie können den interaktiven Generator für Umgebungsvariablen (für Docker) verwenden:
Anwendungsumgebung für Apps (Ansible, Terraform usw.)
Semaphore kann Umgebungsvariablen an Anwendungsprozesse (Ansible, Terraform/OpenTofu, Python, PowerShell usw.) übergeben. Dafür gibt es zwei zusammenhängende Optionen:
env_vars/SEMAPHORE_ENV_VARS: statische Schlüssel-Wert-Paare, die für App-Prozesse gesetzt werden.forwarded_env_vars/SEMAPHORE_FORWARDED_ENV_VARS: eine Liste von Variablennamen, die der Server aus seiner eigenen Prozessumgebung weiterreicht.
Beispiel-Konfigurationsdatei:
{
"env_vars": {
"HTTP_PROXY": "http://proxy.internal:3128",
"ANSIBLE_STDOUT_CALLBACK": "yaml"
},
"forwarded_env_vars": [
"AWS_ACCESS_KEY_ID",
"AWS_SECRET_ACCESS_KEY",
"GOOGLE_APPLICATION_CREDENTIALS"
]
}
Äquivalent mit Umgebungsvariablen:
export SEMAPHORE_ENV_VARS='{"HTTP_PROXY":"http://proxy.internal:3128","ANSIBLE_STDOUT_CALLBACK":"yaml"}'
export SEMAPHORE_FORWARDED_ENV_VARS='["AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","GOOGLE_APPLICATION_CREDENTIALS"]'
Hinweise:
- Die Weitergabe ist explizit: Nur in
forwarded_env_varsaufgeführte Variablen werden von App-Prozessen geerbt. - Geheimnisse sollten auf sicherem Weg bereitgestellt (zum Beispiel über Docker-/Kubernetes-Secrets) und anschließend über
forwarded_env_varsweitergereicht werden. - Dieselbe Liste gilt für die
git-Prozesse, die Repositories klonen und aktualisieren. Alles, wasgitaus der Host-Umgebung braucht, muss also ebenfalls weitergereicht werden.
Betrieb hinter einem Unternehmens-Proxy
Semaphore gibt nicht seine gesamte Umgebung an die Prozesse weiter, die es startet. Insbesondere Proxy-Variablen erreichen eine Aufgabe oder einen git-Klon nur dann, wenn sie in forwarded_env_vars aufgeführt oder in env_vars gesetzt sind.
Am wichtigsten ist das bei einer Paketinstallation (systemd). Proxy-Variablen aus der Unit-Datei gelten für den Semaphore-Server selbst, aber nicht für git:
[Service]
Environment="HTTPS_PROXY=http://proxy.internal:3128"
Environment="HTTP_PROXY=http://proxy.internal:3128"
Environment="NO_PROXY=.corp.example.com"
Mit der obigen Konfiguration und sonst nichts schlägt das Klonen eines Repositories fehl:
fatal: Authentication failed for 'https://git.corp.example.com/team/_git/infra'
git hat NO_PROXY nie gesehen und schickte die Anfrage für den internen Host über den externen Proxy, der sie abgelehnt hat. Reichen Sie die drei Variablen explizit weiter, um das zu beheben:
{
"forwarded_env_vars": ["HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY"]
}
Oder als Umgebungsvariable:
export SEMAPHORE_FORWARDED_ENV_VARS='["HTTP_PROXY","HTTPS_PROXY","NO_PROXY"]'
Hinweise:
- Reichen Sie
NO_PROXYzusammen mit den Proxy-Variablen weiter. Ohne diese Variable wird auch der Verkehr zu internen Git-Servern über den Proxy geleitet. - Viele Werkzeuge lesen die Kleinschreibung (
http_proxy,https_proxy,no_proxy). Unter Linux und macOS wird bei Variablennamen zwischen Groß- und Kleinschreibung unterschieden. Führen Sie daher beide Schreibweisen auf, wenn Ihre Umgebung sie klein schreibt. - Eigene CA-Bundles funktionieren genauso. Wenn Ihr Proxy TLS terminiert, reichen Sie je nach Bedarf
GIT_SSL_CAINFO,SSL_CERT_FILEoderREQUESTS_CA_BUNDLEweiter, anstatt die Zertifikatsprüfung abzuschalten. - Bei Docker-Installationen scheint das meist von selbst zu funktionieren, weil die Proxy-Variablen für den gesamten Container gesetzt sind. Trotzdem empfiehlt es sich, sie explizit weiterzureichen, damit dieselbe Konfiguration auf beiden Wegen identisch funktioniert.
Konfiguration des Runner-Executors
Bei Runner-Deployments kann der gesamte Executor-Block statt über einzelne Schlüssel als eine einzige JSON-Umgebungsvariable gesetzt werden:
export SEMAPHORE_RUNNER_EXECUTOR='{"type":"docker","docker":{"image":"semaphoreui/job:latest"}}'
Das entspricht dem Setzen von runner.executor.type und den untergeordneten Feldern runner.executor.docker.* in der Konfigurationsdatei. Alle Einstellungen des Runner-Executors finden Sie unter Konfigurationsoptionen.
Geheime Umgebungsvariablen in Variablengruppen
Zusätzlich zu globalen Umgebungsvariablen können Sie projektbezogene Geheimnisse in Variablengruppen definieren. Geheime Schlüssel werden in der Oberfläche und in den Logs maskiert. Informationen zur Verwendung und zur Terraform-Integration mit TF_VAR_*-Variablen finden Sie unter User Guide → Variable Groups.