GitHub Actions: ածխաջրածինների ավտոմատացում
(Բաժին ՝ Տեխնոլոգիաներ և ենթակառուցվածքներ)
Live ռեզյումե
GitHub Actions-ը հետազոտման մեջ «փոխակրիչ» է։ IGaming-ի համար սրանք արագ և անվտանգ backends, frontends, ETL/DBT և ML/LLM ծառայություններ են 'թեստերի մատրիցներ, կախվածություն, մեկուսացված runnner-puls, Reusable Workflows մեկ ստանդարտների համար, OIDC փոխարեն Երկար գաղտնիքները, ստորագրությունը և SBSA-ը, թեգերի և GitOps-bamps մանիֆեստների օրինագծերը։ Բանալին որակի/անվտանգության ձևանմուշներն ու խաղացողներն են, որպեսզի պահպանեն p99 և արժեքը վերահսկելու համար։
1) Ճարտարապետական սկզբունքները
Դելպլինները որպես կոդ («.github/workflows/.yml»), DRY-ն Reusable/Composite Actions-ի միջոցով։
Runner-puls (ubuntu-latest) + www.f-hosted (K8s/VM, GPU ML)։
Չորեքշաբթի (Environments): «dev/stage/www.ru» required reviewers, թայմաուտներ և գաղտնիքներ շրջակա միջավայրի վրա։
Քաղաքական գործիչները ՝ intected 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 delint/units-ը տեգուի վրա կոդավորման անվտանգությունն է' v '- SBSA/ստորագրություն և GitOps-bamp մանիֆեստ։
3) Կրկնվող օգտագործումը 'Reusable/Composite
Reusable Workflows: միասնական pipeline ձևանմուշներ բոլոր ծառայությունների համար (առանձին ռեպո «.github»)։
Composite Actions: կրկնվող քայլերի լանջը (լինտ/յունիտներ/սկաններ)։
Reusable-ի զանգի օրինակ
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4) Մատրիցա, քաշ և արտադրողականություն
`strategy. matrone 'զուգահեռ թեստերի համար (լեզուներ/BD/OS)։
Քաշ '«actions/cache» կախվածության համար։ BuildKit с `cache-to: gha`; dependency proxies.
Մրցակցություն '"concurrency: group: api- դոլար + github։ ref++, cancel-in-progress: 112 "- խնայում է րոպեները։
Արտեֆակտներ 'պահել հաշվետվություններ/ծածկոցներ/պրոֆիլներ' «retention-days»։
Մատրիցի օրինակ
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]
5) Environments и approvals
Patte required reviewers-ի համար 'production' (ձեռքի գեյթ)։
Շրջակա միջավայրի նախկին գաղտնիքները 'գաղտնիքները, ստորագրության բանալիները, URSTENDS-ը։
Կյանքի ժամանակը www.view-չորեքշաբթի (www.expire) արժեքի վերահսկման համար։
6) OIDC հասանելիությունը ամպերին (առանց երկարատև գաղտնիքների)
Միացրեք «id-token: write», պարամետրեր trust-policy ամպի մեջ և օգտագործեք ժամանակավոր քրեդենշլներ։
Օգտագործվում է AWS/Azure/GCP/artefact-Records/գաղտնի մենեջերների համար։
Leportprivilege սկզբունքը 'առանձնահատուկ դերեր' «dev/stage/2019»։
Մրցույթի օրինակը (հասկացություն)
yaml
- name: Assume cloud role via OIDC uses: your-org/oidc-assume@v1 with:
role: arn:aws:iam::123:role/gha-deploy-prod
7) Ալգորիթմներ, թեգեր և արտեֆակտներ
Rele.ru tegu: changelog, Express-ասետներ, պատկերների հրապարակումը/2019։
Immutability: Tegi «միայն առաջ», բեռնարկղերի/գծապատկերների ստորագրությունը։
SBSA (Cyclect DX/SPDX) + ստորագրությունը (cosport/sigstore) - գեյթ «առանց ստորագրության - ոչ մի ապացույց»։
8) GitOps и progressive delivery
CD-ը ոչ թե Actions-ից, այլ PR/commit միջոցով մանիֆեստ-ռեպոյի մեջ (Argo CD/Flux)։
Canary/blue-green: GitOps-bampa-ի քայլերը քաշի/տարբերակի; ավտոմեքենան խթանված է SLO-metriks-ով։
Օրինակ GitOps-bampa (գաղափար)
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) Անվտանգությունն ու մատակարարման շղթաները
Ո՞ վ կարող է սկսել 'միայն directed branches/tags-ից, required disks-ից։
Սկանավորում: SFC/SCA/Secret-scan, DLS-ը ավելի բարձր միջավայրերում։
Ստորագրություններ ՝ պատկերներ, Helm-charts, binarniks; վերաֆինանսավորումը դիֆերենցիալ դեպքում։
Քաղաքական գործիչներ 'վեճեր միայն վստահված վորկֆլոից։ pin SHA-ն երրորդ կողմի Actions-ի համար։
10) Դիտարկումը, SLO և ChatOps
Summary հաշվետվությունները (JUnit/coverage/sans), PR արձանները։
Մետրիկները 'փուլերի տևողությունը, հաջողությունը/ֆեյլները, «ռաներների հերթը»։
ChatOps: Bota մեկնաբանությունները PR-ում (հղում dashbords, ավելի բարձր-URL), թիմերը '/promote ', «/rollback »-ը'« workflow _ www.patch »միջոցով։
11) FinOps (րոպեների և ռեսուրսների արժեքը)
Conccurency-cancel-ի համար PR-ի համար, մատրիցները միայն փոխված մասերով (paths-inter)։
Արտեֆակտների հիգիենան ՝ «retention-days», ավտոսրահը ՝ view env։
Winf-hosted փամփուշտները ծանր հավաքման համար/ML, գիշերային «հանգիստ ժամացույց»։
Dependency cache-ը և BuildKit GHA-քեշը մեծ խնայողություն են։
12) Մոնորեպոն և Պարենտը/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 (inff-արտեֆակտներ)
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. Մուտքագրեք SFC/SCA/Secrets/DMS, SBSA և արտեֆակտների ստորագրությունը։ խաղացողները կրիտիկական խոցելիությամբ։
5. Patte GitoPs: մանիֆեստ-ռեպո, պատկերների/տարբերակների, canary/blue-green։
6. Օպտիմիզացրեք քեշը/մատրիցը, «concurrency»։ cancel-in-progress ", արտեֆակտների մաքրում։
7. Տեղադրեք www.f-hosted runner-puls (ներառյալ GPU) սահմանափակումներով և մեկուսացմամբ։
8. Միացրեք paths-corter և rule-2019-ը, որպեսզի չվնասեք ավելորդ ջոբները։
9. Ավելացրեք ChatOps: կարգավիճակներ/թիմեր; զեկույցներ PR-ում։
10. Տեղադրել Actions-ի անվտանգ օգտագործման քաղաքականությունը (pin SHA, սահմանափակել արտաքին)։
15) Անտիպատերնի
Reusable/Composite-ի փոխարեն նույն քայլերը համապատասխանում են ստանդարտների ռասինխրոնին։
Երկարատև cloud-գաղտնիքները փոփոխականների մեջ OIDC-ի փոխարեն։
Environments/approvals-ի բացակայությունը անցքերի համար։
Աջակողմյան Actions-ի անթույլատրելի տարբերակները մեջբերում են supply-chain ռիսկերը։
Ոչ SBIM/ստորագրություններ չեն կարող CD-ի վրա։
Միշտ սկսվող զանգվածային մատրիցները ցույց են տալիս արժեքի աճը։
Actions-ից CD-ն ուղղակիորեն առանց GitOpS փոփոխությունների ուղու։
Արդյունքները
GitHub Actions-ը թույլ է տալիս կառուցել մեկ, անվտանգ և վերարտադրված ածխաջրածնային փոխակրիչ 'ստանդարտ plins Reusable/Composite միջոցով, օգտագործել OIDC և շրջապատում approvals, ներդրեք SBSA/ստորագրություն, փոխանցեք CD-ը G- ին progrogressssssivery plivery-ով, իսկ վերահսկողություն քեշի/մատրիցի/մրցակցության միջոցով։ Այս մոտեցումը մեծանում է iGaming ապրանքի հովանու տակ, պահպանում որակը և նվազեցնում վիրահատական ռիսկերը։