GitHub Actions ile Gyro Kapsayıcı'ya otomatik deploy: derle, gönder, yayınla
1. Yaklaşım
git push → GitHub Actions: docker build → docker push (Gyro imaj deposu)
→ gyro container service update (yeni sürüm, kesintisiz)
→ kontrol; başarısızsa gyro container service rollback
İmajı commit numarasıyla etiketlersiniz; böylece her sürüm sürüm geçmişinde commit'e bağlanır ve geri alma kolaylaşır.
2. Hazırlık: gizli değişkenler
- İmaj deposu parolası: Gyro panelinde İmaj Deposu sayfasından kullanıcı adını ve parolayı alın (Gyro imaj deposu).
- API anahtarı: Müşteri panelinde hesap menüsünden API Kimlik Bilgileri'nde yeni bir anahtar oluşturun; izinlerden hizmet okuma ve yazma izinlerini işaretleyin. Anahtarı CI için ayrı tutun (Gyro API ile ilk adım).
- GitHub deposunda Settings > Secrets and variables > Actions altında şunları ekleyin:
| Ad | Tür | Değer |
|---|---|---|
GYRO_REGISTRY_USER |
Secret | İmaj deposu kullanıcı adı |
GYRO_REGISTRY_PASSWORD |
Secret | İmaj deposu parolası |
GYRO_TOKEN |
Secret | API anahtarı |
GYRO_ENV_ID |
Variable | Kapsayıcı ortam numaranız (ör. 12345) |
GYRO_CODE |
Variable | Adres kodunuz (imaj öneki) |
Parola ve anahtarları iş akışı dosyasına yazmayın; yalnız secrets olarak kullanın. İş akışı günlüklerinde GitHub bu değerleri maskeler.
3. İş akışı dosyası
Depoda .github/workflows/deploy.yml oluşturun:
name: Gyro'ya deploy
on:
push:
branches: [main]
env:
REGISTRY: registry.ist.gyrohosting.com
SERVICE: web # Gyro Kapsayıcı'daki servis adı
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: İmaj deposuna giriş
run: echo "${{ secrets.GYRO_REGISTRY_PASSWORD }}" | docker login $REGISTRY -u "${{ secrets.GYRO_REGISTRY_USER }}" --password-stdin
- name: Derle ve gönder
run: |
IMAGE=$REGISTRY/${{ vars.GYRO_CODE }}/$SERVICE:${{ github.sha }}
docker build -t "$IMAGE" .
docker push "$IMAGE"
echo "IMAGE=$IMAGE" >> "$GITHUB_ENV"
- name: gyro CLI kur
run: |
curl -fsSL https://www.gyrohosting.com/cli/install.sh | GYRO_INSTALL_DIR="$HOME/.local/bin" sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Yeni sürümü yayınla
env:
GYRO_TOKEN: ${{ secrets.GYRO_TOKEN }}
run: |
gyro container service update ${{ vars.GYRO_ENV_ID }} $SERVICE \
--image "$IMAGE" --reason "${{ github.sha }}" --yes
- name: Yayını doğrula (en çok 5 dk)
env:
GYRO_TOKEN: ${{ secrets.GYRO_TOKEN }}
run: |
for i in $(seq 1 30); do
STATE=$(gyro container service get ${{ vars.GYRO_ENV_ID }} $SERVICE -o json --query state | tr -d '"')
echo "durum: $STATE"
[ "$STATE" = "running" ] && exit 0
sleep 10
done
echo "Yayın tamamlanamadı, önceki sürüme dönülüyor"
gyro container service rollback ${{ vars.GYRO_ENV_ID }} $SERVICE --yes
exit 1
Doğrulama adımındaki state alanı, gyro container service get ID AD -o json çıktısındaki servis durumudur; çıktınızın alan adını önce elle deneyip kontrol edin.
gyro aracının 1.10 ve üstü sürümlerinde container komutları bulunur. Kurulum betiği güncel sürümü kurar; belirli bir sürüm için GYRO_VERSION ortam değişkenini kullanın (gyro CLI kurulumu).
4. Nasıl çalışır?
docker pushimajı commit numarasıyla Gyro deposuna gönderir.gyro container service updateyeni sürümü yayınlar. Kopyalar tek tek yenilenir; yeni kopya sağlık kontrolünü geçmeden eski kopya kapatılmaz (kesintisiz).- Doğrulama adımı servis durumu running olana kadar bekler. 5 dakikada olmazsa
rollbackile önceki sürüme döner ve iş akışı başarısız işaretlenir. - Sürüm geçmişinde her sürümün yanında commit numarası görünür (Ölçekleme, güncelleme ve geri alma).
5. Başka bir depodan imaj çekmek (GHCR)
İmajı Gyro deposu yerine GitHub Container Registry'ye gönderirseniz Gyro tarafında bir kez erişim bilgisi tanımlayın: Düğüm Havuzu > Özel imaj deposu'nda ghcr.io, kullanıcı adı ve yalnız çekme (read:packages) izinli bir token girin ya da gyro container external-registry set ID --server ghcr.io --username KULLANICI --password TOKEN. İş akışında docker push ghcr.io/... yapıp --image ghcr.io/... ile yayınlarsınız. Gyro deposunu kullanırsanız bu adıma gerek yoktur.
6. Sık sorulan sorular
unauthorized ile push başarısız, ne yapmalıyım?
Kullanıcı adı/parola bu ortama ait olmalı ve imaj adı registry.ist.gyrohosting.com/<kodunuz>/… ile başlamalı. Parolayı yenilediyseniz GitHub secret'ını güncelleyin.
Her yayında depo doluyor mu?
Hayır; otomatik temizlik, son 10 sürümün imajlarını tutar ve kullanılmayanları siler. Gerekirse Saklanan sürüm değerini ayarlayın (imaj deposu).
Staging ve production ortamlarını ayrı tutabilir miyim?
Her biri için ayrı bir ortam (ya da aynı ortamda ayrı servis) kullanın; iş akışında GYRO_ENV_ID ve SERVICE değerlerini dal başına değiştirin.
Gizli değerleri (veritabanı parolası) iş akışından mı vermeliyim?
Hayır. Bir kez panelden ya da gyro container secret set ile girin; yeni sürümlerde korunurlar (Değişkenler ve gizli değerler).
Sıradaki adım
Geri bildiriminiz için teşekkürler!