GitHub Actions:自動化發布
(部分: 技術和基礎設施)
簡短摘要
GitHub Actions是存儲庫中的本地「代碼流水線」。對於iGaming,這些是後端,前端,ETL/DBT和ML/LLM服務的快速安全發布:測試矩陣,依賴性緩存,隔離的運行者池,用於統一標準的可重復工作流,OIDC代替長壽命的秘密,簽名和SBOM,Tags和GitOps清單保險杠發行。關鍵是質量/安全模板和網關,以控制p99和成本。
1)建築原則
Piplines作為代碼(「.github/workflows /.yml」),通過Reusable/Composite Actions DRY。
亞軍池:托管(ubuntu-latest)+自主(K8s/VM,ML的GPU)。
星期三(環境):「dev/stage/prod」,其中包含詢問的審查員,時間表和周圍環境的秘密。
策略:受保護的品牌/標簽,CODEOWNERS,強制性檢查。
可觀察性:工作峰會,工件,拼寫,持續時間度量。
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 → lint/unit →大→安全性「v」-SBOM/簽名和 GitOps-bamp清單。
3)重復使用: Reusable/Composite
Reusable Workflows:所有服務的單一管道模板(在單獨的repo'.github'中)。
復合操作:重復步驟的拼寫(lint/unit/scans)。
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4)矩陣、緩存和性能
`strategy.用於並行測試(語言/DB/OS)的矩陣。
緩存: 依賴關系的「操作/緩存」;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
為「制作」(手動門)配置請求的查看器。
環境的Per Secret:Deploy令牌,簽名密鑰,看臺URL。
預覽環境(auto-expire)的壽命以控制成本。
6)OIDC雲訪問(無長期秘密)
啟用「id-token: write」,在雲中配置信任策略,並使用臨時密鑰。
適用於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)發行版,標簽和工件
通過tag發布:changelog,發布摘要,發布映像/軟件包。
Immutability:「僅向前」標記,容器/圖表簽名。
SBOM (CycloneDX/SPDX)+簽名(cosign/sigstore)-「無簽名-無降級」門。
8) GitOps и progressive delivery
CD不是「來自Actions」,而是通過PR/commit到manifest-repo(Argo CD/Flux)。
金絲雀/藍綠色:GitOps-bump重量/版本步驟;根據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) pipline和供應鏈安全
誰可以運行:僅來自受保護的分支機構/標簽,並帶有required檢查。
掃描:SAST/SCA/秘密掃描,預覽環境中的DAST。
標題:圖像,Helm圖表,二進制;在沈積時進行驗證。
政策:僅來自值得信賴的鍛煉者;第三方Actions的pin SHA。
10)可觀察性,SLO和ChatOps
摘要報告(JUnit/coverage/scans),公關狀態。
度量標準:階段持續時間,成功/失敗,「先發制人隊列」。
ChatOps:公關中的機器人評論(指向行車記錄儀、預覽URL)、命令'/promote'、'/rollback'通過'workflow_dispatch'。
11) FinOps(分鐘和資源成本)
Conccurency-cancel for PR,矩陣僅在更改的部分(paths-filter)上。
文物衛生:「retention-days」,自動預覽env。
重型裝配/ML的自助托管池,夜間的「安靜時鐘」。
Dependency cache和BuildKit GHA緩存可節省大量資金。
12)單聲道和父母/兒童編排
按文件夾/路徑觸發:每個組件的獨立工作流。
可作為團隊之間的標準化層(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(地獄工件)
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 with approvals和單獨的秘密。
3.轉到OIDC到Cloud/Secret Manager,卸下持久密鑰。
4.輸入SAST/SCA/Secrets/DAST,SBOM和工件簽名;關鍵漏洞門。
5.配置GitOps: manifor-repo、自動映像/版本保險杠、金絲雀/藍綠色。
6.優化緩存/矩陣,「concurrency」。cancel-in-progress',文物清理。
7.展開具有極限和絕緣性的自托管跑步者池(包括GPU)。
8.啟用paths-filter和rule設置,以免賽車額外的joba。
9.添加ChatOps:狀態/命令;公關報告。
10.確定Actions安全使用策略(pin SHA,限制外部)。
15)反模式
在所有回購中,相同的步驟而不是Reusable/Composite →標準分步器。
變量中的長壽命雲秘密代替OIDC。
缺少Environments/provals for prod。
第三方Actions的未壓縮版本→供應鏈的風險。
沒有SBOM/簽名 → CD上沒有驗證。
總是發射的大容量矩陣→成本上升。
從Actions直接到prod的CD,而沒有GitOps更改跟蹤。
結果
GitHub Actions允許構建一個單一、安全和可播放的發布管道:通過Reusable/Composite標準化管道,使用OIDC和隨行人員,實施SBOM/簽名,通過漸進式交付將CD轉換為GitOps,並通過緩存/矩陣/復制控制成本競爭力。這種方法可以擴展到iGaming產品的速度,保持質量並降低運營風險。