Działania GitHub: Automatyzacja wydań
(Sekcja: Technologia i infrastruktura)
Krótkie podsumowanie
GitHub Actions to rodzimy „rurociąg jako kod” w repozytorium. Dla iGaming, są to szybkie i bezpieczne zwolnienia backendów, frontendów, ETL/DBT i ML/LLM usługi: matryce testowe, pamięci podręcznej zależności, izolowane puli biegaczy, wielokrotnego użytku przepływy pracy dla jednolitych standardów, OIDC zamiast długotrwałych sekretów, podpis i SBOM, wydania przez tagi i GitOps-guzy manifestów. Kluczem są szablony i bramki jakości/bezpieczeństwa, aby utrzymać p99 i koszty pod kontrolą.
1) Zasady architektoniczne
Rurociągi jako kod (".github/workflows/.yml'), DRY poprzez działania wielokrotnego użytku/kompozytowe.
Runner pools: hosted (ubuntu-latest) + self-hosted (K8s/VM, GPU for ML).
Środowiska: "dev/stage/prod' z wymaganymi recenzentami, terminami i tajemnicami środowiskowymi.
Zasady: chronione oddziały/tagi, CODEOWNERS, obowiązkowe kontrole.
Obserwowalność: podsumowania zadań, artefakty, rejestrowanie, pomiary czasu trwania.
2) Podstawowy szablon 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
Idea: PR → lint/units → security → by tag 'v' - SBOM/signature i GitOps-bump manifesta do wdrożenia.
3) Ponowne użycie: wielokrotnego użytku/kompozytu
Wielokrotnego użytku: szablony rurociągów dla wszystkich usług (w oddzielnym repo „.github”).
Działania złożone: klejenie powtarzanych kroków (lint/units/scans).
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4) Matryce, pamięć podręczna i wydajność
"strnologia. matryca "dla badań równoległych (języki/DB/OS).
Pamięć podręczna: „działania/pamięć podręczna” dla zależności; „cache-to: gha”; pełnomocników ds. zależności.
Konkurencyjność: "współistnienie: grupa: api-$ {{github. ref}}, anuluj-w toku: true '- oszczędza minuty.
Artefakty: raporty magazynowe/pokrycie/profile z „retention-days”.
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]
5) Zatwierdzanie środowisk
Skonfigurowanie wymaganych recenzentów do 'produkcji' (ręczna brama).
Tajemnice środowiskowe: wdrożenie żetonów, kluczy podpisu, URL stoisk.
Podgląd życia środowiska (auto-expire) do kontroli kosztów.
6) Dostęp OIDC do chmur (bez długotrwałych tajemnic)
Włącz 'id-token: write', skonfiguruj politykę zaufania w chmurze i użyj kredytów tymczasowych.
Dotyczy AWS/Azure/GCP/artifact-registers/secret-managers.
Zasada najmniejszego przywileju: indywidualne role w '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) Wydania, tagi i artefakty
Release by tag: changelog, release assets, publishing images/packages.
Immunitet: znaczniki „tylko do przodu”, podpis kontenera/mapy.
SBOM (CycloneDX/SPDX) + signature (cosign/sigstore) - unsigned gate - no deployment.
8) Dostawa progresywna GitOps
Płyta CD nie jest „z akcji”, ale poprzez PR/zobowiązać się do manifestu repo (Argo CD/Flux).
Kanaryjski/niebiesko-zielony: waga/wersja GitOps-bump kroki; auto-promocja na metrykach 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) Bezpieczeństwo rurociągów i łańcucha dostaw
Kto może uruchomić: tylko z chronionych gałęzi/tagów, z wymaganymi kontrolami.
Skanowanie: SAST/SCA/Secret-scan, DAST w środowiskach podglądu.
Podpisy: obrazy, mapy Helm, binaries; weryfikacja podczas wyczerpywania.
Politycy: wysyła tylko z zaufanych przepływów pracy; Szpilka SHA dla działań osób trzecich.
10) Obserwowalność, SLO i ChatOp
Sprawozdania podsumowujące (JUnit/coverage/scans), statusy w PR.
Metryka: czas trwania etapu, sukces/porażki, kolejka biegaczy.
ChatOps: komentarze bot w PR (linki do desek rozdzielczych, podgląd URL), polecenia '/promote ', '/rollback' poprzez 'workflow _ dispatch'.
11) FinOps (koszt minut i zasobów)
Concurrency-anuluj dla PR, matryca tylko dla zmienionych części (ścieżki-filtr).
Higiena artefaktów: "retencja-days", auto-close preview "
Samodzielne baseny do ciężkich zespołów/ML, nocne „ciche godziny”.
Pamięć podręczna zależność i pamięć podręczna GHA w Kit są znaczące oszczędności.
12) Monorepos i rodzic/orkiestra dziecięca
Wyzwalacze folderu/ścieżki: niezależne przepływy pracy na komponent.
Wielokrotnego użytku jako warstwa standaryzacyjna pomiędzy zespołami (Płatności/Ryzyko/CRM/ETL/ML).
Rozdzielenie tajemnic/środowisk przez komponenty.
13) Szablony dla 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
Z) 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 (artefakty wnioskowania)
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) Lista kontrolna wdrażania
1. Zdefiniuj szablony CI/CD (wielokrotnego użytku/kompozytu) i zastosuj je do wszystkich repo.
2. Uwzględnij Środowiska z zatwierdzeniami i podzieleniem tajemnic.
3. Przejdź do OIDC do chmur/tajnych menedżerów, usuń trwałe klucze.
4. Wprowadź podpis SAST/SCA/Secrets/DAST, SBOM i artefakt; krytyczne bramy wrażliwości.
5. Konfiguracja GitOps: manifest-repo, auto-guzki obrazy/wersje, kanaryjski/niebiesko-zielony.
6. Zoptymalizuj pamięć podręczną/matrycę, 'concurrency'. anulować w toku ", usuwając artefakty.
7. Uruchamianie samozatrudnionych biegaczy (w tym GPU) z ograniczeniami i izolacją.
8. Włącz filtr ścieżek i ustawienia reguł, aby uniknąć jazdy dodatkowych jabs.
9. Dodaj ChatOps: statusy/polecenia; raporty w PR.
10. Fix the Actions secure use policies (pin SHA, restrict external).
15) Antypattery
Te same kroki we wszystkich repo zamiast Reusable/Composite → poza standardami synchronizacji.
Długotrwałe sekrety chmur w zmiennych zamiast OIDC.
Brak środowisk/zatwierdzenia
Nieskompresowane wersje działań osób trzecich → ryzyko łańcucha dostaw.
Brak SBOM/podpisów → brak weryfikacji na płycie CD.
Masywne matryce, które zawsze działają → wzrost kosztów.
CD z Actions bezpośrednio do produkcji bez zmian śledzenia GitOps.
Podsumowanie
GitHub Actions pozwala zbudować pojedynczy, bezpieczny i odtwarzalny rurociąg wydań: standaryzować rurociągi poprzez wielokrotnego użytku/kompozytu, używać OIDC i środowisk z zatwierdzeniami, wdrożyć SBOM/podpis, przenieść płytę CD do GitOps z progresywną dostawą i koszty kontrolowane przez pamięć podręczną/matryce/konkurencyjność. To podejście jest skalą w tempie produktu iGaming, zachowuje jakość i zmniejsza ryzyko operacyjne.