GitHub Actions: релиздерди автоматташтыруу
(Бөлүк: Технология жана инфраструктура)
Кыскача резюме
GitHub Actions - репозиторийдеги "код катары жергиликтүү конвейер". iGaming үчүн бул бэкенддердин, фронтенддердин, ETL/DBT жана ML/LLM кызматтарынын тез жана коопсуз релиздери: тест матрицалары, көз карандылык кэши, обочолонгон runner пулдар, бирдиктүү стандарттар үчүн Reusable Workflows, узак мөөнөттүү сырлардын ордуна OIDC, кол коюу жана SBOM, теги жана GitOps-бамп манифесттеринин релиздери. Ачкыч - сапаты/коопсуздук үлгүлөрү жана гейтс p99 жана наркы көзөмөлгө алуу үчүн.
1) Архитектуралык принциптер
Code ('.github/workflows/.yml'), Reusable/Composite Actions аркылуу DRY.
Runner пулдар: hosted (ubuntu-latest) + self-hosted (K8s/VM, ML үчүн GPU).
Айлана-чөйрө (Environments): 'dev/stage/prod' required reviewers, убакыт жана айлана-чөйрөнүн сырлары менен.
Саясат: корголгон бөлүмдөрү/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: бардык кызматтар үчүн бирдиктүү түтүк үлгүлөрү (өзүнчө репо '.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) Matrix, кэш жана аткаруу
`strategy. matrix 'параллелдүү тесттер үчүн (тилдер/DD/OS).
Кэш: '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 орнотуп, убактылуу credenshly колдонуңуз.
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, релиз assets, сүрөттөрдү/пакеттерди жарыялоо.
Immutability: тегдер "гана алдыга", контейнерлер/чарттардын кол.
SBOM (CycloneDX/SPDX) + кол (cosign/sigstore) - дарбазасы "кол жок - эч кандай деплой".
8) GitOps и progressive delivery
CD "иш-аракеттерден" эмес, PR/commit аркылуу манифест реподо (Argo CD/Flux).
Canary/көк-жашыл: GitOps-Bampa салмагы/версия кадам; 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) Pipeline коопсуздук жана жеткирүү чынжыр
Ким гана корголгон branches/tags, required checks.
Сканерлөө: SAST/SCA/Secret-scan, алдын ала чөйрөлөрдө DAST.
Кол тамгалар: сүрөттөр, Helm-чарттар, бинардык; деплойдо текшерүү.
Саясат: ишенимдүү workflow гана диспатчи; үчүнчү тарап Actions үчүн SHA pin.
10) байкоо, SLO жана ChatOps
Summary отчеттор (JUnit/coverage/Scan), PR статусу.
Метрика: этаптардын узактыгы, ийгилик/фейл, "раннерлердин кезеги".
ChatOps: PR боттун комментарийлери (dashboard шилтемелери, алдын ала URL), команда '/promote ', '/rollback' аркылуу 'workflow _ dispatch'.
11) FinOps (мүнөт жана ресурстардын наркы)
PR үчүн Concurency-cancel, өзгөргөн бөлүктөрү боюнча гана матрицалар (жолдор-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 }
B) ML/LLM (Inferens артефакттары)
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. Approvals жана өзүнчө сырлар менен Environments кирет.
3. Булуттарга/жашыруун менеджерлерге OIDCге өтүңүз, бышык ачкычтарды алып салыңыз.
4. SAST/SCA/Secrets/DAST, SBOM жана артефакттардын кол тамгасын киргизиңиз; оор кемчиликтер боюнча гейтс.
5. GitOps орнотуу: манифест-репо, auto-бампер сүрөттөр/версиялар, canary/blue-green.
6. Кэш/матрицаларды оптималдаштыруу, 'concurrency. cancel-in-progress ', экспонаттарды тазалоо.
7. self-hosted runner-пулдарды (анын ичинде GPU) лимиттери жана изоляциясы менен жайгаштырыңыз.
8. Ашыкча буктурмаларды кууп чыкпоо үчүн жолдорду filter жана рулет орнотууларын күйгүзүңүз.
9. ChatOps кошуу: статустар/команда; PR отчеттор.
10. Actions коопсуз колдонуу саясатын бекитүү (SHA pin, тышкы чектейт).
15) Антипаттерндер
Reusable/Composite → Рассинхрон стандарттарынын ордуна бардык реподо бирдей кадамдар.
OIDC ордуна өзгөрмөлүү узак мөөнөттүү булут сырлары.
Жок Environments/approvals үчүн прод.
Үчүнчү тараптын Actions → supply-chain тобокелдик эмес нускалары.
Жок SBOM/кол → жок CD текшерүү.
Дайыма ишке массалык матрицалар → нарк өсүшү.
Actions CD түздөн-түз GitOps-Tracking өзгөрүүлөр жок.
Натыйжалары
GitHub Actions бирдиктүү, коопсуз жана ойнотулуучу релиз конвейерин курууга мүмкүндүк берет: Reusable/Composite аркылуу пайплайндарды стандартташтырыңыз, OIDC жана approvals менен чөйрөнү колдонуңуз, SBOM/кол тамгасын киргизиңиз, CDди прогрессивдүү жеткирүү менен GitOpsка которуңуз жана чыгашалар кэш/матрица/атаандаштык аркылуу көзөмөлгө алынат. Бул ыкма iGaming продуктунун темпи боюнча масштабдуу болуп саналат, сапатын сактап жана операциялык тобокелдиктерди азайтат.