Codex-Kontoauthentifizierung in CI/CD aufrechterhalten (fortgeschritten)
Verwenden Sie den integrierten Aktualisierungsablauf von Codex, damit auth.json auf vertrauenswürdigen CI/CD-Runnern funktionsfähig bleibt
Dieser Leitfaden zeigt, wie Sie die von ChatGPT verwaltete Codex-Authentifizierung auf einem vertrauenswürdigen CI/CD-Runner funktionsfähig halten, ohne den OAuth-Token-Endpunkt selbst aufzurufen.
Für die Authentifizierung von Automatisierungen ist ein API key die richtige Wahl. Verwenden Sie diesen Leitfaden nur, wenn Sie den Workflow ausdrücklich mit Ihrem Codex-Konto ausführen müssen.
Das Vorgehen sieht wie folgt aus:
- Erstellen Sie
auth.jsoneinmalig auf einem vertrauenswürdigen Computer mitcodex login. - Legen Sie diese Datei auf dem Runner ab.
- Führen Sie Codex wie gewohnt aus.
- Lassen Sie Codex die Sitzung aktualisieren, sobald sie veraltet ist.
- Bewahren Sie die aktualisierte Datei
auth.jsonfür den nächsten Lauf auf.
Dies ist ein fortgeschrittener Workflow für Unternehmen und andere vertrauenswürdige private Automatisierungsumgebungen. API keys werden weiterhin für die meisten CI/CD-Aufträge empfohlen.
Warum dies funktioniert
Codex kann eine von ChatGPT verwaltete Sitzung bereits selbst aktualisieren.
Im aktuellen Open-Source-Client gilt:
- Codex lädt den lokalen Authentifizierungscache aus
auth.json - wenn
last_refreshälter als ungefähr 8 Tage ist, aktualisiert Codex das Token-Paket, bevor der Lauf fortgesetzt wird - nach einer erfolgreichen Aktualisierung schreibt Codex die neuen Token und einen neuen
last_refreshzurück nachauth.json - wenn eine Anfrage einen
401erhält, verfügt Codex außerdem über einen integrierten Ablauf zum Aktualisieren und erneuten Versuchen
Die unterstützte CI/CD-Strategie lautet daher nicht „Rufen Sie die Aktualisierungs-API selbst auf“.
Sie lautet: „Führen Sie Codex aus und speichern Sie die aktualisierte Datei auth.json dauerhaft.“
Wann Sie dieses Verfahren verwenden sollten
Verwenden Sie diesen Leitfaden nur, wenn alle folgenden Bedingungen erfüllt sind:
- Sie benötigen eine von ChatGPT verwaltete Codex-Authentifizierung anstelle eines API key
codex loginkann auf dem Remote-Runner nicht ausgeführt werden- der Runner ist eine vertrauenswürdige private Infrastruktur
- Sie können die aktualisierte Datei
auth.jsonzwischen Läufen aufbewahren - nur ein Computer oder ein serialisierter Auftragsstrom verwendet jeweils eine bestimmte Kopie von
auth.json
Dieser Leitfaden gilt für die von Codex verwaltete ChatGPT-Authentifizierung (auth_mode: "chatgpt").
Er gilt nicht für:
- Authentifizierung per API key
- Host-Integrationen mit externen Token (
auth_mode: "chatgptAuthTokens") - generische OAuth-Clients außerhalb von Codex
Wenn Ihre Anmeldedaten im Schlüsselbund des Betriebssystems gespeichert sind, wechseln Sie zunächst zur dateibasierten Speicherung. Weitere Informationen finden Sie unter Speicherung von Anmeldedaten.
auth.json einmalig als Ausgangsdatei erstellen
Auf einem vertrauenswürdigen Computer, auf dem die Browseranmeldung möglich ist:
- Konfigurieren Sie Codex so, dass Anmeldedaten in einer Datei gespeichert werden:
cli_auth_credentials_store = "file"- Führen Sie Folgendes aus:
codex login- Prüfen Sie, ob die Datei wie eine verwaltete ChatGPT-Authentifizierung aussieht:
AUTH_FILE="${CODEX_HOME:-$HOME/.codex}/auth.json"
jq '{
auth_mode,
has_tokens: (.tokens != null),
has_refresh_token: ((.tokens.refresh_token // "") != ""),
last_refresh
}' "$AUTH_FILE"Fahren Sie nur fort, wenn:
auth_modeden Wert"chatgpt"hathas_refresh_tokenden Werttruehat
Übertragen Sie anschließend den Inhalt von auth.json in Ihre CI/CD-Geheimnisverwaltung oder kopieren
Sie ihn auf einen vertrauenswürdigen persistenten Runner.
Empfohlenes Muster: GitHub Actions auf einem selbst gehosteten Runner
Die einfachste vollständig automatisierte Einrichtung ist ein selbst gehosteter GitHub Actions-Runner mit einem
persistenten CODEX_HOME.
Warum dieses Muster gut funktioniert:
- der Runner kann
auth.jsonzwischen Aufträgen auf dem Datenträger behalten - Codex kann die Datei direkt aktualisieren
- spätere Aufträge übernehmen die aktualisierten Token automatisch
- Sie benötigen das ursprüngliche Geheimnis nur zur Ersteinrichtung oder erneuten Initialisierung
Entscheidend ist, auth.json nur dann mit der Ausgangsdatei zu befüllen, wenn die Datei fehlt. Wenn Sie
die Datei bei jedem Lauf mit dem ursprünglichen Geheimnis überschreiben, verwerfen Sie die
aktualisierten Token, die Codex gerade gespeichert hat.
Beispiel für einen geplanten Workflow:
name: Keep Codex auth fresh
on:
schedule:
- cron: "0 9 * * 1"
workflow_dispatch:
jobs:
keep-codex-auth-fresh:
runs-on: self-hosted
steps:
- name: Bootstrap auth.json if needed
shell: bash
env:
CODEX_AUTH_JSON: ${{ secrets.CODEX_AUTH_JSON }}
run: |
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
mkdir -p "$CODEX_HOME"
chmod 700 "$CODEX_HOME"
if [ ! -f "$CODEX_HOME/auth.json" ]; then
printf '%s' "$CODEX_AUTH_JSON" > "$CODEX_HOME/auth.json"
chmod 600 "$CODEX_HOME/auth.json"
fi
- name: Run Codex
shell: bash
run: |
codex exec --json "Reply with the single word OK." >/dev/nullDieser Workflow bewirkt Folgendes:
- beim ersten Lauf wird
auth.jsonmit der Ausgangsdatei befüllt - spätere Läufe verwenden dieselbe Datei erneut
- sobald die zwischengespeicherte Sitzung alt genug ist, aktualisiert Codex sie während des normalen
Schritts
codex exec - die aktualisierte Datei verbleibt für den nächsten Workflow-Lauf auf dem Datenträger
Ein wöchentlicher Zeitplan reicht normalerweise aus, da Codex die Sitzung im aktuellen Open-Source-Client nach ungefähr 8 Tagen als veraltet behandelt.
Flüchtige Runner: Wiederherstellen, Codex ausführen und die aktualisierte Datei dauerhaft speichern
Wenn Sie von GitHub gehostete Runner, gemeinsam genutzte GitLab-Runner oder eine andere flüchtige Umgebung verwenden, wird das Dateisystem des Runners nach jedem Auftrag verworfen. In dieser Konfiguration ist ein vollständiger Hin- und Rücklauf erforderlich:
- Stellen Sie die aktuelle Datei
auth.jsonaus einem sicheren Speicher wieder her - führen Sie Codex aus
- schreiben Sie die aktualisierte Datei
auth.jsonin den sicheren Speicher zurück
Generischer Aufbau für GitHub Actions:
name: Run Codex with managed auth
on:
workflow_dispatch:
jobs:
codex-job:
runs-on: ubuntu-latest
steps:
- name: Restore auth.json
shell: bash
run: |
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
mkdir -p "$CODEX_HOME"
chmod 700 "$CODEX_HOME"
# Replace this with your secret manager or secure storage command.
my-secret-cli read codex-auth-json > "$CODEX_HOME/auth.json"
chmod 600 "$CODEX_HOME/auth.json"
- name: Run Codex
shell: bash
run: |
codex exec --json "summarize the failing tests"
- name: Persist refreshed auth.json
if: always()
shell: bash
run: |
# Replace this with your secret manager or secure storage command.
my-secret-cli write codex-auth-json < "$CODEX_HOME/auth.json"Entscheidend ist, dass der Rückschreibeschritt die aktualisierte Datei speichert, die Codex während des Laufs erzeugt hat, und nicht die ursprüngliche Ausgangsdatei.
Sie benötigen keinen separaten Aktualisierungsbefehl
Jeder normale Codex-Lauf kann die Sitzung aktualisieren.
Damit stehen Ihnen zwei gute Möglichkeiten zur Verfügung:
- Lassen Sie Ihren vorhandenen CI/CD-Auftrag mit Codex die Datei automatisch aktualisieren
- Fügen Sie einen schlanken geplanten Wartungsauftrag wie im obigen GitHub Actions-Beispiel hinzu, wenn Ihre eigentlichen Aufträge nicht häufig genug ausgeführt werden
Der erste Codex-Lauf, nachdem die Sitzung veraltet ist, aktualisiert
auth.json.
Wichtige Betriebsregeln
- Verwenden Sie eine Datei
auth.jsonpro Runner oder pro serialisiertem Workflow-Strom. - Verwenden Sie dieselbe Datei nicht gleichzeitig in mehreren Aufträgen oder auf mehreren Computern.
- Überschreiben Sie die aktualisierte Datei eines persistenten Runners nicht bei jedem Lauf mit der ursprünglichen Ausgangsdatei.
- Speichern Sie
auth.jsonweder im Repository noch in Protokollen oder öffentlichen Artefaktspeichern. - Initialisieren Sie die Datei erneut von einem vertrauenswürdigen Computer aus, wenn die integrierte Aktualisierung nicht mehr funktioniert.
Vorgehen, wenn die Aktualisierung nicht mehr funktioniert
Dieser Ablauf reduziert den manuellen Aufwand, garantiert jedoch nicht, dass dieselbe Sitzung unbegrenzt gültig bleibt.
Initialisieren Sie den Runner mit einer neuen Datei auth.json, wenn:
- Codex beginnt,
401zurückzugeben, und der Runner die Sitzung nicht mehr aktualisieren kann - das Aktualisierungstoken widerrufen wurde oder abgelaufen ist
- ein anderer Computer oder ein gleichzeitig ausgeführter Auftrag das Token zuerst rotiert hat
- der Hin- und Rücklauf zu Ihrem sicheren Speicher fehlgeschlagen ist und eine alte Datei wiederhergestellt wurde
So initialisieren Sie die Datei erneut:
- Führen Sie
codex loginauf einem vertrauenswürdigen Computer aus. - Ersetzen Sie die in CI/CD gespeicherte Kopie von
auth.json. - Lassen Sie den nächsten Runner-Auftrag weiterhin den integrierten Aktualisierungsablauf von Codex verwenden.
Prüfen, ob der Runner die Sitzung aufrechterhält
Prüfen Sie, ob der Runner weiterhin verwaltete Authentifizierungstoken besitzt und ob last_refresh
vorhanden ist:
AUTH_FILE="${CODEX_HOME:-$HOME/.codex}/auth.json"
jq '{
auth_mode,
last_refresh,
has_access_token: ((.tokens.access_token // "") != ""),
has_id_token: ((.tokens.id_token // "") != ""),
has_refresh_token: ((.tokens.refresh_token // "") != "")
}' "$AUTH_FILE"Wenn Ihr Runner persistent ist, sollte dieselbe Datei zwischen den Läufen weiterhin vorhanden sein. Wenn Ihr Runner flüchtig ist, prüfen Sie, ob der Rückschreibeschritt die aktualisierte Datei aus dem letzten Auftrag speichert.
Quellenverweise
Wenn Sie dieses Verhalten im Open-Source-Client überprüfen möchten:
codex-rs/core/src/auth.rsbehandelt die Erkennung veralteter Token, die automatische Aktualisierung, die Wiederherstellung durch Aktualisieren nach einem 401-Fehler sowie die dauerhafte Speicherung aktualisierter Tokencodex-rs/core/src/auth/storage.rsbehandelt die dateibasierte Speicherung vonauth.json