GitHub Actions: buraxılışların avtomatlaşdırılması
(Bölmə: Texnologiya və Infrastruktur)
Qısa xülasə
GitHub Actions - anbarda yerli «kod kimi konveyer». iGaming üçün bu backends, frontends, ETL/DBT və ML/LLM xidmətlərinin sürətli və təhlükəsiz buraxılışlarıdır: test matrisləri, asılılıq cache, izolyasiya runner hovuzları, vahid standartlar üçün Reusable Workflows, uzunmüddətli sirlərin əvəzinə OIDC, imza və SBOM, etiketlər və GitOps-bamps manifestləri ilə relizlər. Açar - p99 və dəyəri nəzarət altında saxlamaq üçün keyfiyyət/təhlükəsizlik şablonları və geytaları.
1) Memarlıq prinsipləri
Kod kimi payplaynlar ('.github/workflows/.yml'), Reusable/Composite Actions vasitəsilə DRY.
Runner hovuzları: hosted (ubuntu-latest) + self-hosted (K8s/VM, ML üçün GPU).
Mühit (Environments): 'dev/stage/prod' required reviewers, taymaut və ətraf mühit sirləri ilə.
Siyasətçilər: protected branches/tags, CODEOWNERS, məcburi yoxlamalar.
Müşahidə: job summaries, artefaktlar, loging, uzunluq metrikası.
2) CI → CD (backend) əsas şablon
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 → lint/unities → təhlükəsizlik → tag 'v' - SBOM/deploi üçün imza və GitOps-bump manifestləri.
3) Təkrar istifadə: Reusable/Composite
Reusable Workflows: bütün xidmətlər üçün vahid boru şablonları (ayrı repo '.github').
Composite Actions: təkrarlanan addımların yapışdırılması (lint/unit/scan).
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4) Matrislər, cache və performans
`strategy. matrix 'paralel testlər üçün (dillər/BD/OS).
Cache: asılılıq üçün 'actions/cache'; BuildKit с `cache-to: gha`; dependency proxies.
Rəqabət: 'concurrency: group: api- $ {{github. ref}}, cancel-in-progress: true '- dəqiqələrə qənaət edir.
Artefaktlar: hesabatları/əhatə dairəsini/profillərini 'retention-days' ilə saxlayın.
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]
5) Environments и approvals
required reviewers üçün 'production' (əl qapısı).
Ortam sirləri: deploi tokenləri, imza açarları, stendlərin URL-ləri.
Xərclərə nəzarət etmək üçün preview mühit ömrü (auto-expire).
6) OIDC-buludlara giriş (uzun ömürlü sirləri olmadan)
'id-token: write' daxil edin, buludda trust-policy qurun və müvəqqəti kredenşllardan istifadə edin.
AWS/Azure/GCP/artefakt-reyestrlər/gizli menecerlər üçün tətbiq olunur.
least privilege prinsipi: 'dev/stage/prod' fərdi rolları.
yaml
- name: Assume cloud role via OIDC uses: your-org/oidc-assume@v1 with:
role: arn:aws:iam::123:role/gha-deploy-prod
7) Relizlər, tag və artefaktlar
Release tag: changelog, release assets, image/paket nəşr.
Immutability: «yalnız irəli» etiketləri, konteynerlərin/siyahıların imzası.
SBOM (CycloneDX/SPDX) + imza (cosign/sigstore) - qapı «imzasız - deploi yoxdur».
8) GitOps и progressive delivery
CD "Actions 'dan deyil, PR/commit vasitəsilə manifest reposuna (Argo CD/Flux).
Canary/blue-green: GitOps-bampa çəki/versiyası addımları; SLO-metrik avto-promosyon.
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) Paypline və təchizat zəncirinin təhlükəsizliyi
Kim başlaya bilər: Yalnız protected branches/tags, required checks ilə.
Scan: SAST/SCA/Secret-scan, DAST preview mühitlərində.
İmzalar: şəkillər, Helm-çartlar, binarniklər; deployda yoxlama.
Siyasətçilər: yalnız etibarlı işlərdən dispatches; üçüncü tərəf Actions üçün pin SHA.
10) Müşahidə, SLO və ChatOps
Summary hesabatlar (JUnit/coverage/scan), PR statusları.
Metriklər: mərhələlərin müddəti, uğur/feyl, «ranner növbəsi».
ChatOps: PR botun şərhləri (dashboard linkləri, preview-URL), '/promote ', '/rollback' komandaları 'workflow _ dispatch' vasitəsilə.
11) FinOps (dəqiqə və resurs dəyəri)
PR üçün Concurency-cancel, matris yalnız dəyişmiş hissələri (paths-filter).
Artefaktların gigiyenası: 'retention-days', avto sifariş preview env.
Self-hosted ağır montaj hovuzları/ML, gecə «sakit saat».
Dependency cache və BuildKit GHA cache - əhəmiyyətli qənaət.
12) Monorepo və Parent/Uşaq orkestrasiyası
Qovluqlarda/yollarda tetikləyicilər: komponentdə müstəqil workflow.
Komandalar arasında standartlaşdırma təbəqəsi kimi reusable (Payments/Risk/CRM/ETL/ML).
Sirlərin/mühitlərin komponentlərə görə ayrılması.
13) iGaming üçün şablonlar
A) Backend/API (Go/Node/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 (inferens-artefaktlar)
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) Giriş çek siyahısı
1. CI/CD (Reusable/Composite) şablonlarını müəyyən edin və onları bütün repolara tətbiq edin.
2. Approvals və ayrı-ayrı sirləri ilə Environments daxil edin.
3. Bulutlara/gizli menecerlərə OIDC-yə keçin, davamlı açarları çıxarın.
4. SAST/SCA/Secrets/DAST, SBOM və artefaktların imzasını daxil edin; kritik zəifliklərə görə geytlər.
5. GitOps konfiqurasiya: manifest repo, auto-bamps image/versiyası, canary/blue-green.
6. Cache/matrisləri optimallaşdırın, 'concurrency. cancel-in-progress ', artefaktların təmizlənməsi.
7. Limitlər və izolyasiya ilə self-hosted runner-hovuzları (GPU daxil olmaqla) yerləşdirin.
8. Lazımsız jobları qaçırmamaq üçün paths-filter və rule parametrlərini açın.
9. ChatOps əlavə edin: statuslar/komandalar; PR hesabatları.
10. Actions təhlükəsiz istifadə siyasətlərini düzəldin (pin SHA, xarici məhdudlaşdırın).
15) Antipattern
Reusable/Composite → rasinchron standartları əvəzinə bütün repo eyni addımlar.
OIDC əvəzinə dəyişənlərdə uzun ömürlü cloud sirləri.
Prod üçün Environments/approvals yoxdur.
Üçüncü tərəf Actions → supply-chain riskləri qeyri-cizgi versiyası.
No SBOM/imzalar → CD-də yoxlama yoxdur.
Həmişə başla massiv matrislər → qiymət artımı.
Actions-dan CD-lər birbaşa GitOps-tracking dəyişikliyi olmadan.
Nəticələr
GitHub Actions vahid, təhlükəsiz və təkrar edilə bilən buraxılış konveyerini qurmağa imkan verir: payplaynları Reusable/Composite vasitəsilə standartlaşdırın, OIDC və approvals ilə mühitdən istifadə edin, SBOM/imza daxil edin, CD-ni progressive delivery ilə GitOps-a tərcümə edin, xərclər isə cache/matris/rəqabət yolu ilə nəzarət altındadır. Bu yanaşma iGaming məhsulunun templəri altında ölçülür, keyfiyyəti saxlayır və əməliyyat risklərini azaldır.