CI/CD'de Codex hesap kimlik doğrulamasını sürdürme (ileri düzey)
Güvenilir CI/CD çalıştırıcılarında auth.json dosyasını çalışır durumda tutmak için Codex'in yerleşik yenileme akışını kullanın
Bu kılavuz, OAuth belirteç uç noktasını kendiniz çağırmadan ChatGPT tarafından yönetilen Codex kimlik doğrulamasını güvenilir bir CI/CD çalıştırıcısında çalışır durumda tutmayı gösterir.
Otomasyonun kimliğini doğrulamanın doğru yolu API key kullanmaktır. Bu kılavuzu yalnızca iş akışını özellikle Codex hesabınızla çalıştırmanız gerekiyorsa kullanın.
İzlenecek düzen şöyledir:
- Güvenilir bir makinede
codex loginile bir kezauth.jsonoluşturun. - Bu dosyayı çalıştırıcıya yerleştirin.
- Codex'i normal şekilde çalıştırın.
- Oturum güncelliğini yitirdiğinde Codex'in onu yenilemesine izin verin.
- Yenilenmiş
auth.jsondosyasını sonraki çalıştırma için saklayın.
Bu, kurumsal ve diğer güvenilir özel otomasyonlar için ileri düzey bir iş akışıdır. Çoğu CI/CD görevi için önerilen seçenek hâlâ API keys kullanmaktır.
Bu neden çalışır?
Codex, ChatGPT tarafından yönetilen bir oturumu nasıl yenileyeceğini zaten bilir.
Mevcut açık kaynaklı istemciye göre:
- Codex, yerel kimlik doğrulama önbelleğini
auth.jsonkonumundan yükler last_refreshyaklaşık 8 günden eskiyse Codex, çalıştırma devam etmeden önce belirteç paketini yeniler- başarılı bir yenilemenin ardından Codex, yeni belirteçleri ve yeni bir
last_refreshdeğerini yenidenauth.jsonkonumuna yazar - bir istek
401alırsa Codex ayrıca yerleşik bir yenileme ve yeniden deneme yoluna sahiptir
Dolayısıyla desteklenen CI/CD stratejisi "yenileme API'sini kendiniz çağırın" değildir.
Strateji, "Codex'i çalıştırın ve güncellenmiş auth.json dosyasını kalıcı olarak saklayın" şeklindedir.
Ne zaman kullanılmalı?
Bu kılavuzu yalnızca aşağıdaki koşulların tümü karşılandığında kullanın:
- API key yerine ChatGPT tarafından yönetilen Codex kimlik doğrulamasına ihtiyacınız var
codex loginuzak çalıştırıcıda çalışamıyor- çalıştırıcı güvenilir özel altyapıda bulunuyor
- yenilenmiş
auth.jsondosyasını çalıştırmalar arasında koruyabiliyorsunuz - belirli bir
auth.jsonkopyasını yalnızca tek bir makine veya seri hâle getirilmiş görev akışı kullanacak
Bu kılavuz, Codex tarafından yönetilen ChatGPT kimlik doğrulaması (auth_mode: "chatgpt") için geçerlidir.
Şunlar için geçerli değildir:
- API key kimlik doğrulaması
- harici belirteç kullanan ana makine entegrasyonları (
auth_mode: "chatgptAuthTokens") - Codex dışındaki genel OAuth istemcileri
Kimlik bilgileriniz işletim sistemi anahtarlığında saklanıyorsa önce dosya tabanlı depolamaya geçin. Bkz. Kimlik bilgisi depolama.
auth.json dosyasını bir kez başlangıç verisiyle doldurma
Tarayıcıda oturum açmanın mümkün olduğu güvenilir bir makinede:
- Codex'i kimlik bilgilerini bir dosyada saklayacak şekilde yapılandırın:
cli_auth_credentials_store = "file"- Şunu çalıştırın:
codex login- Dosyanın yönetilen ChatGPT kimlik doğrulamasına benzediğini doğrulayın:
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"Yalnızca şu koşullarda devam edin:
auth_mode,"chatgpt"değerine eşithas_refresh_token,truedeğerine eşit
Ardından auth.json içeriğini CI/CD gizli bilgi yöneticinize yerleştirin veya
güvenilir, kalıcı bir çalıştırıcıya kopyalayın.
Önerilen düzen: kendi barındırdığınız bir çalıştırıcıda GitHub Actions
Tamamen otomatik en basit kurulum, kalıcı bir
CODEX_HOME bulunan, kendi barındırdığınız bir GitHub Actions çalıştırıcısıdır.
Bu düzenin iyi çalışmasının nedenleri:
- çalıştırıcı, görevler arasında
auth.jsondosyasını diskte tutabilir - Codex dosyayı yerinde yenileyebilir
- sonraki görevler yenilenmiş belirteçleri otomatik olarak kullanır
- özgün gizli bilgiye yalnızca başlangıç kurulumu veya yeniden başlangıç verisi sağlama için ihtiyaç duyarsınız
Kritik ayrıntı, auth.json dosyasına yalnızca dosya eksikse başlangıç verisi sağlamaktır. Dosyayı
her çalıştırmada özgün gizli bilgiden yeniden yazarsanız Codex'in az önce yazdığı
yenilenmiş belirteçleri kaybedersiniz.
Zamanlanmış örnek iş akışı:
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/nullBu iş akışının yaptıkları:
- ilk çalıştırma
auth.jsondosyasına başlangıç verisi yazar - sonraki çalıştırmalar aynı dosyayı yeniden kullanır
- önbelleğe alınmış oturum yeterince eskidiğinde Codex, normal
codex execadımı sırasında oturumu yeniler - yenilenmiş dosya, sonraki iş akışı çalıştırması için diskte kalır
Mevcut açık kaynaklı istemcide Codex oturumu yaklaşık 8 gün sonra güncelliğini yitirmiş saydığından haftalık bir zamanlama genellikle yeterlidir.
Geçici çalıştırıcılar: geri yükleme, Codex'i çalıştırma ve güncellenmiş dosyayı kalıcı olarak saklama
GitHub tarafından barındırılan çalıştırıcıları, GitLab paylaşımlı çalıştırıcılarını veya başka bir geçici ortamı kullanıyorsanız çalıştırıcının dosya sistemi her görevden sonra kaybolur. Bu kurulumda gidiş dönüşlü bir işleme ihtiyacınız vardır:
- geçerli
auth.jsondosyasını güvenli depolamadan geri yükleyin - Codex'i çalıştırın
- güncellenmiş
auth.jsondosyasını yeniden güvenli depolamaya yazın
Genel GitHub Actions yapısı:
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"Temel gereklilik, geri yazma adımının özgün başlangıç verisini değil, Codex'in çalıştırma sırasında ürettiği yenilenmiş dosyayı saklamasıdır.
Ayrı bir yenileme komutuna ihtiyacınız yoktur
Her normal Codex çalıştırması oturumu yenileyebilir.
Dolayısıyla iki iyi seçeneğiniz vardır:
- mevcut CI/CD Codex görevinizin dosyayı doğal şekilde yenilemesine izin vermek
- gerçek görevleriniz yeterince sık çalışmıyorsa yukarıdaki GitHub Actions örneğine benzer hafif bir zamanlanmış bakım görevi eklemek
Oturum güncelliğini yitirdikten sonraki ilk Codex çalıştırması
auth.json dosyasını yeniler.
Önemli işletim kuralları
- Her çalıştırıcı veya seri hâle getirilmiş her iş akışı için bir
auth.jsonkullanın. - Aynı dosyayı eşzamanlı görevler veya birden fazla makine arasında paylaşmayın.
- Kalıcı bir çalıştırıcının yenilenmiş dosyasının üzerine her çalıştırmada özgün başlangıç verisini yazmayın.
auth.jsondosyasını depoda, günlüklerde veya herkese açık yapıt depolamasında saklamayın.- Yerleşik yenileme çalışmayı durdurursa güvenilir bir makineden yeniden başlangıç verisi sağlayın.
Yenileme çalışmayı durdurduğunda ne yapılmalı?
Bu akış manuel çalışmayı azaltır ancak aynı oturumun sonsuza kadar sürmesini garanti etmez.
Şu durumlarda çalıştırıcıya yeni bir auth.json dosyasıyla yeniden başlangıç verisi sağlayın:
- Codex
401döndürmeye başlar ve çalıştırıcı artık yenileme yapamazsa - yenileme belirteci iptal edilmişse veya süresi dolmuşsa
- başka bir makine veya eşzamanlı görev belirteci önce yenilemişse
- güvenli depolama gidiş dönüşünüz başarısız olmuş ve eski bir dosya geri yüklenmişse
Yeniden başlangıç verisi sağlamak için:
- Güvenilir bir makinede
codex loginkomutunu çalıştırın. - CI/CD'de saklanan
auth.jsonkopyasını değiştirin. - Sonraki çalıştırıcı görevinin Codex'in yerleşik yenileme akışını kullanarak devam etmesine izin verin.
Çalıştırıcının oturumu koruduğunu doğrulama
Çalıştırıcıda hâlâ yönetilen kimlik doğrulama belirteçleri bulunduğunu ve last_refresh değerinin
var olduğunu denetleyin:
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"Çalıştırıcınız kalıcıysa aynı dosyanın çalıştırmalar arasında varlığını sürdürdüğünü görmelisiniz. Çalıştırıcınız geçiciyse geri yazma adımınızın son görevdeki güncellenmiş dosyayı sakladığını doğrulayın.
Kaynak referansları
Bu davranışı açık kaynaklı istemcide doğrulamak isterseniz:
codex-rs/core/src/auth.rsgüncelliğini yitirmiş belirteç algılamayı, otomatik yenilemeyi, 401 sonrası yenileme ve kurtarmayı ve yenilenmiş belirteçlerin kalıcı olarak saklanmasını kapsarcodex-rs/core/src/auth/storage.rsdosya tabanlıauth.jsondepolamasını kapsar