GitHub Actions: релиздерді автоматтандыру
(Бөлім: Технологиялар және Инфрақұрылым)
Қысқаша түйіндеме
GitHub Actions - репозиторийдегі «код ретінде» ұлттық конвейер. iGaming үшін бұл бэкендтердің, фронтендтердің, ETL/DBT және ML/LLM қызметтерінің жылдам және қауіпсіз релиздері: тест матрицалары, тәуелділік кэші, оқшауланған runner пулдар, бірыңғай стандарттар үшін Reusable Workflows, ұзақ өмір сүретін құпиялардың орнына OIDC, қолтаңба және SBOM, тегтер бойынша релиздер және манифесттердің GitOps-бамптары. Кілт - p99 және құнын бақылауда ұстау үшін сапа/қауіпсіздік үлгілері мен гейттері.
1) Сәулет қағидаттары
('.github/workflows/.yml'), Reusable/Composite Actions арқылы DRY коды ретінде пайплайндар.
Runner-пулдар: hosted (ubuntu-latest) + self-hosted (K8s/VM, ML үшін GPU).
Орта (Environments): 'dev/stage/prod' required reviewers, таймауттар және ортадағы құпиялармен.
Саясат: protected branches/tags, CODEOWNERS, міндетті тексерулер.
Байқалуы: job summaries, артефакттар, логика, ұзақтық метрикасы.
2) CI → CD (backend) негізгі үлгісі
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
Идея: PR → линт/юниттер → қауіпсіздік → 'v' - SBOM/қолтаңба және GitOps-бамп деплойға арналған манифесттер.
3) Қайта пайдалану: Reusable/Composite
Reusable Workflows: барлық сервистер үшін бірыңғай pipeline үлгілері (жеке '.github' репосында).
Composite Actions: қайталанатын қадамдарды желімдеу (линт/юниттер/сканерлер).
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4) Матрицалар, кэш және өнімділік
`strategy. matrix 'параллель тесттер үшін (тілдер/ДБ/ОС).
Кэш: тәуелділіктер үшін 'actions/cache'; BuildKit с `cache-to: gha`; dependency proxies.
Бәсекелестік: 'concurrency: group: api- $ {{github. ref}}, cancel-in-progress: true '- минуттарды үнемдейді.
Артефакттар: есептерді/жабындарды/профильдерді 'retention-days' бағдарламасымен сақтау.
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]
5) Environments и approvals
required reviewers 'production' (қол гейт) үшін теңшеңіз.
Ортаның пер-құпиялары: деплой токендері, қол қою кілттері, стендтердің URL.
Құнын бақылау үшін preview-ортаның (auto-expire) өмір сүру уақыты.
6) OIDC-бұлттарға қолжетімділік (ұзақ мерзімді құпиясыз)
'id-token: write' дегенді қосыңыз, бұлтта trust-policy бағдарламасын теңшеңіз және уақытша кредитеншілдерді пайдаланыңыз.
AWS/Azure/GCP/артефакт-тізілімдер/құпия менеджерлер үшін қолданылады.
least privilege қағидаты: 'dev/stage/prod' -те жеке рөлдер.
yaml
- name: Assume cloud role via OIDC uses: your-org/oidc-assume@v1 with:
role: arn:aws:iam::123:role/gha-deploy-prod
7) Релиздер, тегтер және артефактілер
Release тэг бойынша: changelog, релиз-ассеттер, бейнелерді/пакеттерді жариялау.
Immutability: «тек алға» тегтері, контейнерлердің/чарттардың қолтаңбасы.
SBOM (CycloneDX/SPDX) + қолы (cosign/sigstore) - «қолсыз - деплой жоқ» гейт.
8) GitOps и progressive delivery
CD «Actions» емес, PR/commit арқылы манифест-репоға (Argo CD/Flux).
Canary/blue-green: салмақ/нұсқа GitOps-бамп қадамдары; SLO-метриктер бойынша авто-промоушен.
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) Пайплайн және жеткізу тізбегінің қауіпсіздігі
Кім іске қосыла алады: тек protected branches/tags, required checks.
Сканерлеу: SAST/SCA/Secret-scan, алдын ала ортада DAST.
Қолтаңбалар: бейнелер, Helm-чарталар, бинарниктер; деплой кезіндегі верификация.
Саясат: тек сенiм бiлдiрiлген воркфлоудан диспатчтар; Сыртқы Actions үшін pin SHA.
10) Бақылау, SLO және ChatOps
Summary есептер (JUnit/coverage/сканерлер), PR-дағы мәртебелер.
Метрика: кезеңдер ұзақтығы, табыс/фейла, «раннерлер кезегі».
ChatOps: боттың PR аңғартпалары (дашбордқа сілтемелер, превью-URL), '/promote ', '/rollback' командалары 'workflow _ dispatch' арқылы.
11) FinOps (минуттар мен ресурстардың құны)
Concurency-cancel PR үшін, матрицалар тек өзгерген бөліктер бойынша (paths-filter).
Артефактілердің гигиенасы: 'retention-days', автоматты жабу preview env.
Self-hosted ауыр құрастыру пулы/ML, түнгі «тыныш сағат».
Dependency cache және BuildKit GHA-кэш - айтарлықтай үнемдеу.
12) Монорепо және Parent/Child-оркестрі
Қалталар/жолдар бойынша триггерлер: компонентке тәуелсіз workflow.
Командалар арасындағы стандарттау қабаты ретінде Reusable (Payments/Risk/CRM/ETL/ML).
Компоненттер бойынша құпияларды/ортаны бөлу.
13) iGaming үлгілері
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 }
В) ML/LLM (инференс-артефактілер)
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) Енгізу чек-парағы
1. CI/CD (Reusable/Composite) үлгілерін анықтап, оларды барлық репоға қолданыңыз.
2. Environments approvals және бөлек құпияларды қосыңыз.
3. OIDC-ге бұлттарға/құпия менеджерлерге өтіңіз, берік кілттерді алып тастаңыз.
4. SAST/SCA/Secrets/DAST, SBOM және артефактілердің қолтаңбасын енгізіңіз; сыни осалдықтар бойынша гейттер.
5. GitOps баптау: манифест-репо, бейнелер/нұсқалар авто-бамп, canary/blue-green.
6. Кэшті/матрицаны оңтайландырыңыз, 'concurrency. cancel-in-progress ', артефактілерді тазалау.
7. self-hosted runner-пулдарды (оның ішінде GPU) лимиттермен және оқшаулаумен орналастырыңыз.
8. Артық джобтарды жібермеу үшін paths-filter және rule параметрлерін қосыңыз.
9. ChatOps қосыңыз: мәртебелер/пәрмендер; PR есебі.
10. Actions (pin SHA, сыртқы шектеуді) қауіпсіз пайдалану саясатын белгілеңіз.
15) Антипаттерндер
Reusable/Composite → рассинхрон стандарттарының орнына барлық реполарда бірдей қадамдар.
OIDC орнына айнымалыларда ұзақ өмір сүретін cloud құпиялары.
Өнімдер үшін Environments/approvals болмауы.
Сыртқы Actions → supply-chain тәуекелдерінің статистикалық емес нұсқалары.
SBOM/қолтаңбалары жоқ → CD растамасы жоқ.
Әрқашан іске қосылатын массивті матрицалар → құн өсімі.
Actions CD-лері тікелей GitOps өзгертулері жоқ.
GitHub Actions бірыңғай, қауіпсіз және ойнатылатын релиздер конвейерін құруға мүмкіндік береді: Reusable/Composite арқылы пайплайндарды стандарттаңыз, OIDC және approvals-ды пайдаланыңыз, SBOM/қолтаңбаны енгізіңіз, CD-ні progressive delivery-мен GitOps-ке аударыңыз, ал шығыстар кэш/матрица/бәсекелестік арқылы бақылауға алынады. Мұндай тәсіл iGaming-өнімнің қарқынымен кеңейтіледі, сапаны сақтап, операциялық тәуекелдерді төмендетеді.