Türkçe

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:

  1. Güvenilir bir makinede codex login ile bir kez auth.json oluşturun.
  2. Bu dosyayı çalıştırıcıya yerleştirin.
  3. Codex'i normal şekilde çalıştırın.
  4. Oturum güncelliğini yitirdiğinde Codex'in onu yenilemesine izin verin.
  5. Yenilenmiş auth.json dosyası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.json konumundan yükler
  • last_refresh yaklaşı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_refresh değerini yeniden auth.json konumuna yazar
  • bir istek 401 alı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 login uzak çalıştırıcıda çalışamıyor
  • çalıştırıcı güvenilir özel altyapıda bulunuyor
  • yenilenmiş auth.json dosyasını çalıştırmalar arasında koruyabiliyorsunuz
  • belirli bir auth.json kopyası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:

  1. Codex'i kimlik bilgilerini bir dosyada saklayacak şekilde yapılandırın:
cli_auth_credentials_store = "file"
  1. Şunu çalıştırın:
codex login
  1. 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şit
  • has_refresh_token, true değ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.json dosyası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/null

Bu iş akışının yaptıkları:

  • ilk çalıştırma auth.json dosyası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 exec adı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:

  1. geçerli auth.json dosyasını güvenli depolamadan geri yükleyin
  2. Codex'i çalıştırın
  3. güncellenmiş auth.json dosyası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.json kullanı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.json dosyası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 401 dö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:

  1. Güvenilir bir makinede codex login komutunu çalıştırın.
  2. CI/CD'de saklanan auth.json kopyasını değiştirin.
  3. 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: