GitHub Eylemleri: Sürümleri Otomatikleştirme
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
GitHub Eylemleri, bilgi havuzundaki yerel bir "kod olarak boru hattı'dır. İGaming için, bunlar arka uçların, ön uçların, ETL/DBT ve ML/LLM hizmetlerinin hızlı ve güvenli sürümleridir: test matrisleri, bağımlılık önbelleği, izole koşucu havuzları, tekdüze standartlar için yeniden kullanılabilir İş Akışları, uzun ömürlü sırlar yerine OIDC, imza ve SBOM, etiketler ve GitOps darbeleri ile bültenler Manifestoların. Anahtar, p99 ve maliyeti kontrol altında tutmak için şablonlar ve kalite/güvenlik kapılarıdır.
1) Mimari ilkeler
Kod olarak boru hatları ('.github/iş akışları/.yml'), Yeniden Kullanılabilir/Bileşik Eylemler yoluyla DRY.
Koşucu havuzları: barındırılan (ubuntu-en son) + kendi kendine barındırılan (K8s/VM, ML için GPU).
Ortamlar: Gerekli gözden geçirenler, zaman aşımları ve çevre sırları ile 'dev/stage/prod'.
Politikalar: korumalı şubeler/etiketler, CODEOWNERS, zorunlu kontroller.
Gözlemlenebilirlik: iş özetleri, eserler, günlük kaydı, süre metrikleri.
2) Temel şablon CI - CD (arka uç)
yaml name: ci-cd-backend on:
pull_request:
branches: [ main ]
push:
tags: [ "v" ]
permissions:
contents: read id-token: write # для OIDC packages: write
env:
IMAGE: ghcr. io/${{ github. repository }}/api:${{ github. sha }}
jobs:
lint_test:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5 with: { python-version: '3. 12' }
- name: Cache pip uses: actions/cache@v4 with:
path: ~/.cache/pip key: pip-${{ runner. os }}-${{ hashFiles('requirements. txt') }}
- run: pip install -r requirements. txt
- run: make lint && make test
- name: Build & push image (BuildKit)
uses: docker/build-push-action@v6 with:
push: ${{ github. event_name == 'push' }}
tags: ${{ env. IMAGE }}
cache-from: type=gha cache-to: type=gha,mode=max
security:
needs: [ lint_test ]
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: SCA/SAST/Secrets uses: your-org/security-composite@v3 # Composite Action вашей орг.
release_prod:
if: startsWith(github. ref, 'refs/tags/v')
needs: [ security ]
runs-on: ubuntu-latest environment: production steps:
- uses: actions/checkout@v4
- name: SBOM & Sign uses: your-org/sbom-sign-action@v2 with:
image: ${{ env. IMAGE }}
- name: GitOps bump manifests uses: your-org/gitops-bump@v2 with:
image: ${{ env. IMAGE }}
path: apps/api/values. yaml
Fikir: PR> tiftik/birim> güvenlik> 'v' etiketiyle - SBOM/imza ve dağıtım için GitOps-bump manifestoları.
3) Yeniden kullanım: Yeniden kullanılabilir/Kompozit
Yeniden Kullanılabilir İş Akışları: tüm hizmetler için tek bir boru hattı şablonu (ayrı bir repo '.github'da).
Bileşik Eylemler: tekrarlanan adımların yapıştırılması (tiftik/birimler/taramalar).
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4) Matrisler, önbellek ve performans
'strateji. Paralel testler için matris (diller/DB/OS).
Önbellek: Bağımlılıklar için 'eylemler/önbellek'; BuildKit с 'cache-to: gha'; Bağımlılık vekilleri.
Rekabetçilik: 'eşzamanlılık: grup: api- $ {{github. ref}}, devam eden iptal: true '- dakika kazandırır.
Dışlayıcılar: raporları/kapsamı/profilleri 'tutma günleri'ile saklayın.
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]
5) Ortamlar и onaylar
'Üretim' (manuel kapı) için gerekli gözden geçiricileri yapılandırın.
Çevre sırları: belirteçleri, imza anahtarlarını, standların URL'sini dağıtın.
Maliyet kontrolü için önizleme ortamı ömrü (otomatik zaman aşımı).
6) Bulutlara OIDC erişimi (uzun ömürlü sırlar olmadan)
'Id-token: write' özelliğini etkinleştirin, bulutta güven ilkesini yapılandırın ve geçici krediler kullanın.
AWS/Azure/GCP/artifact-registers/secret-managers için geçerlidir.
En az ayrıcalık ilkesi: 'dev/sahne/prod' üzerinde bireysel roller.
yaml
- name: Assume cloud role via OIDC uses: your-org/oidc-assume@v1 with:
role: arn:aws:iam::123:role/gha-deploy-prod
7) Sürümler, etiketler ve eserler
Etikete göre serbest bırak: changelog, yayın varlıkları, görüntüleri/paketleri yayınlama.
Bağışıklık: "Yalnızca ileri" etiketleri, konteyner/grafik imzası.
SBOM (CycloneDX/SPDX) + imza (cosign/sigstore) - imzasız kapı - dağıtım yok.
8) GitOps и aşamalı teslimat
CD "Eylemlerden'değil, bir repo manifestosuna (Argo CD/Flux) PR/taahhüt yoluyla.
Kanarya/mavi-yeşil: ağırlık/sürüm GitOps-bump adımları; SLO metriklerinde otomatik tanıtım.
yaml
- uses: mikefarah/yq@v4 with:
cmd: yq -i '.image = strenv(IMAGE)' apps/api/values. yaml
- run:
git config user. name "gha-bot"
git commit -am "bump api -> $IMAGE" && git push
9) Boru hattı ve tedarik zinciri güvenliği
Kimler çalışabilir: yalnızca korunan dallardan/etiketlerden, gerekli kontrollerle.
Tarama: SAST/SCA/Gizli tarama, önizleme ortamlarında DAST.
İmzalar: görüntüler, Helm grafikleri, ikili dosyalar; tükenme sırasında doğrulama.
Politikacılar: yalnızca güvenilir iş akışlarından gönderiler; Üçüncü taraf Eylemler için SHA pin.
10) Gözlemlenebilirlik, SLO ve ChatOps
Özet raporları (JUnit/kapsama/taramalar), PR'deki durumlar.
Metrikler: sahne süresi, başarı/başarısızlık, koşucu kuyruğu.
ChatOps: PR'de bot yorumları (gösterge tablolarına bağlantılar, önizleme URL'si), 'workflow _ dispatch' aracılığıyla'/promote ','/rollback' komutları.
11) FinOps (dakika ve kaynak maliyeti)
PR için eşzamanlılık-iptal, yalnızca değişen parçalar için matris (yollar-filtre).
Eserlerin hijyeni: 'tutma günleri', otomatik kapanma önizlemesi env.
Ağır montajlar/ML, gece "sessiz saatler" için kendi kendine barındırılan havuzlar.
Bağımlılık önbelleği ve BuildKit GHA önbelleği önemli tasarruflardır.
12) Monorepos ve Ebeveyn/Çocuk orkestrasyonu
Klasör/yol tetikleyicileri: Bileşen başına bağımsız iş akışları.
Takımlar arasında bir standardizasyon katmanı olarak yeniden kullanılabilir (Ödemeler/Risk/CRM/ETL/ML).
Sırların/ortamların bileşenlere göre ayrılması.
13) iGaming için Şablonlar
A) Arka uç/API (Git/Düğüm/Python)
yaml name: backend on: [ pull_request, push ]
jobs:
ci:
uses: your-org/ci-templates/.github/workflows/backend. yml@v3 release:
if: startsWith(github. ref, 'refs/tags/v')
uses: your-org/ci-templates/.github/workflows/release. yml@v3 secrets: inherit
Б) ETL/DBT
yaml name: etl-dbt on: [ pull_request ]
jobs:
dbt:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5 with: { python-version: '3. 11' }
- run: pip install dbt-core dbt-bigquery
- run: dbt deps && dbt run && dbt test
- name: Publish docs run: dbt docs generate && tar czf docs. tgz target/
load artifact, retention period 3 days uses: actions/upload-artifact @ v4 with: {name: dbt-docs, path: docs. tgz, retention-days: 3 }
B) ML/LLM (çıkarım artifaktları)
yaml name: ml-pack on:
push:
tags: [ "model-" ]
jobs:
build-engine:
runs-on: self-hosted-gpu steps:
- uses: actions/checkout@v4
- run: python export_onnx. py
- run: trtexec --onnx=model. onnx --saveEngine=model. plan
- uses: actions/upload-artifact@v4 with: { name: engine, path: model. plan, retention-days: 7 }
- name: Sign & SBOM uses: your-org/sbom-sign-action@v2 with: { file: model. plan }
14) Uygulama kontrol listesi
1. CI/CD (Yeniden Kullanılabilir/Bileşik) şablonlarını tanımlayın ve bunları tüm repolara uygulayın.
2. Onayları ve bölünmüş sırları olan ortamları dahil edin.
3. Bulutlar/gizli yöneticilere OIDC gidin, dayanıklı anahtarları kaldırın.
4. SAST/SCA/Secrets/DAST, SBOM ve eser imzasını girin; Kritik kırılganlık kapıları.
5. GitOps'u yapılandırın: manifest-repo, otomatik çarpma görüntüleri/sürümleri, kanarya/mavi-yeşil.
6. Önbellek/matrisleri en iyileştirme, 'eşzamanlılık. İptal ediliyor ', artifaktlar temizleniyor.
7. Kendi kendine barındırılan koşucuları (GPU'lar dahil) sınırlamalar ve izolasyonla dağıtın.
8. Ekstra sarsıntıları önlemek için yol filtreleme ve kural ayarlarını etkinleştirin.
9. ChatOps ekleyin: durumlar/komutlar; Halkla ilişkiler raporları.
10. Fix the Actions güvenli kullanım politikaları (pin SHA, dışsal kısıtlama).
15) Antipatterns
Yeniden Kullanılabilir/Kompozit yerine tüm repolarda aynı adımlar - senkronizasyon dışı standartlar.
OIDC yerine değişkenlerde uzun ömürlü bulut sırları.
Ortamların Yokluğu/Onaylar
Üçüncü taraf Eylemlerinin sıkıştırılmamış sürümleri - tedarik zinciri riskleri.
SBOM/imza yok - CD'de doğrulama yok.
Her zaman çalışan masif matrisler - maliyet artışları.
GitOps izleme değişiklikleri olmadan doğrudan üretime Eylemler CD.
Özet
GitHub Actions, tek, güvenli ve tekrarlanabilir bir yayın hattı oluşturmanıza olanak tanır: Boru hatlarını Yeniden Kullanılabilir/Kompozit yoluyla standartlaştırın, OIDC ve onaylı ortamları kullanın, SBOM/imzayı uygulayın, CD'yi GitOps'a aşamalı teslimatla aktarın ve maliyetler önbellek/matrisler/rekabet gücü ile kontrol altında. Bu yaklaşım, iGaming ürününün hızına göre ölçeklenir, kaliteyi korur ve operasyonel riskleri azaltır.