Logo GH

GitHub Actions: გამოშვების ავტომატიზაცია

(განყოფილება: ტექნოლოგიები და ინფრასტრუქტურა)

მოკლე რეზიუმე

GitHub Actions არის მშობლიური „კონვეიერი, როგორც კოდი“ საცავში. IGaming- ისთვის, ეს არის სწრაფი და უსაფრთხო გამოშვებები ზურგჩანთების, ფრონტების, ETL/DBT და ML/LLM სერვისებისთვის: ტესტების მატრიცები, დამოკიდებულების ქეში, იზოლირებული რუნერის აუზები, Reusable Workflows ერთი სტანდარტებისთვის, OIIDDDC- ს ნაცვლად გრძელი საიდუმლოებები, ხელმოწერა და SBOM, ტეგების გამოშვებები და GitOps-bamps მანიფესტები. გასაღები არის ხარისხის/უსაფრთხოების შაბლონები და კარიბჭეები, რათა შეინარჩუნოს p99 და ღირებულება კონტროლის ქვეშ.

1) არქიტექტურული პრინციპები

Payplines, როგორც კოდი ('.github/workflows/.yml'), DRY Reusable/Composite Actions.
Runner puls: მასპინძელი (ubuntu-latest) + self-hosted (K8s/VM, GPU ML- ისთვის).
ოთხშაბათს (Environments): 'dev/stage/stage' ერთად required მიმოხილვები, ტაიმაუტები და წრის საიდუმლოებები.
პოლიტიკოსები: დაცული branches/tags, CODEOWNERS, სავალდებულო შემოწმებები.
დაკვირვება: job summaries, არტეფაქტები, ლოჯიკაცია, ხანგრძლივობის მეტრიკა.

2) ძირითადი შაბლონი CI (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/ერთეული, tegu 'v' - SBOM/ხელმოწერა და GitOps-bamp მანიფესტები.

3) ხელახალი გამოყენება: Reusable/Composite

Reusable Workflows: ერთი მილის შაბლონები ყველა მომსახურებისთვის (ცალკეულ რეპოში '.github').
კომპოზიციური მოქმედებები: განმეორებითი ნაბიჯების წებოვანი (ლინტი/ერთეული/სკანერები).

Reusable ზარის მაგალითი:
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true

4) მატრიცები, ქეში და შესრულება

`strategy. matrix 'პარალელური ტესტებისთვის (ენები/BD/OS).
ქეში: 'actions/cache' დამოკიდებულებისთვის; BuildKit с `cache-to: gha`; dependency proxies.
კონკურენცია: 'concurrency: ჯგუფი: api- $ {github. ref}, cancel-in-progress: true '- დაზოგავს წუთებს.
არტეფაქტები: შეინახეთ მოხსენებები/საფარი/პროფილები 'retention-days'.

მატრიცის მაგალითი:
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]

5) Environments и approvals

Required მიმოხილვების პარამეტრები 'production' (სახელმძღვანელო კარიბჭე).
გარემოსდაცვითი საიდუმლოებები: ზეპირი ნიშნები, ხელმოწერის გასაღებები, URL სტენდი.
წინასწარი მედიის ცხოვრების დრო (auto-expire) ღირებულების გასაკონტროლებლად.

6) OIDC წვდომა ღრუბლებზე (ხანგრძლივი საიდუმლოებების გარეშე)

ჩართეთ 'id-token: write', დააკონკრეტეთ ღრუბელში თქვენი ნდობის პოლიტიკა და გამოიყენეთ დროებითი კრედიტები.
გამოიყენება AWS/Azure/GCP/არტეფაქტური რეესტრებისთვის/საიდუმლო მენეჯერებისთვის.
Least privilege- ის პრინციპი: ცალკეული როლები 'dev/stage/'.

ნაბიჯის მაგალითი (კონცეფცია):
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 on tegu: changelog, გამოცემა-ასეტი, სურათების/პაკეტების გამოქვეყნება.
Immutability: tegi „მხოლოდ წინ“, კონტეინერების/ჩარტების ხელმოწერა.
SBOM (CycloneDX/SPDX) + ხელმოწერა (cosign/sigstore) - კარიბჭე „ხელმოწერის გარეშე არ არის დამატებითი“.

8) GitOps и progressive delivery

CD არ არის „Actions“ - დან, არამედ PR/commit- ის საშუალებით მანიფესტის რეპოში (Argo CD/Flux).
Canary/blue-green: GitOps bamp- ის წონის/ვერსიის ნაბიჯები; მანქანა დაწინაურებულია SLO მეტრებში.

GitOps Bamp- ის მაგალითი (იდეა):
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) Paypline უსაფრთხოება და მიწოდების ჯაჭვები

ვის შეუძლია დაიწყოს: მხოლოდ დაცული branches/tags- დან, რეკორდული შემოწმებებით.
სკანირება: SAST/SCA/Secret-scan, DAST წინასწარ ოთხშაბათს.
ხელმოწერები: სურათები, Helm ჩარტები, ბინარები; გადამოწმება უკანა მხარეს.
პოლიტიკოსები: დისპათიები მხოლოდ მინდობილი ვორკფლოუდან; pin SHA მესამე მხარის Actions.

10) დაკვირვება, SLO და ChatOps

საზაფხულო მოხსენებები (JUnit/coverage/skans), სტატუსები PR- ში.
მეტრიკა: სტადიების ხანგრძლივობა, წარმატება/ფეილები, „რანერების ხაზი“.
ChatOps: ბოტის კომენტარები PR- ში (ბმულები დაშბორდებზე, წინასწარ URL), ბრძანებები '/promote ', '/rollback' '' workflow _ dispatch- ის საშუალებით.

11) FinOps (წუთისა და რესურსების ღირებულება)

Concurency-cancel for PR, მატრიცები მხოლოდ შეცვლილი ნაწილებით (paths-filter).
არტეფაქტების ჰიგიენა: 'retention-days', წინასწარი დახურვა.
Self-hosted აუზები მძიმე შეკრებისთვის/ML, ღამის „მშვიდი საათი“.
Dependence cache და BuildKit GHA ქეში მნიშვნელოვანი დანაზოგია.

12) მონორეპო და პარიზი/ბავშვთა ორკესტრი

მამაჩემის/ბილიკების ტრიგერები: დამოუკიდებელი 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 (ინვერსიული არტეფაქტები)

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- ის პარამეტრები: მანიფესტი-რეპო, ავტო-ბამპები სურათები/ვერსიები, კანარი/ცისფერი-მწვანე.
6. ოპტიმიზაცია მოახდინეთ ქეში/მატრიცები, 'concurrence. cancel-in-progress ', არტეფაქტების გაწმენდა.
7. განათავსეთ self-hosted runner-puls (მათ შორის GPU) ლიმიტით და იზოლაციით.
8. ჩართეთ paths filter და rule პარამეტრები ისე, რომ არ გაიაროთ ზედმეტი ჯობი.
9. დაამატეთ ChatOps: სტატუსები/ბრძანებები; მოხსენებები PR- ში.
10. დააფიქსირეთ Actions- ის უსაფრთხო გამოყენების პოლიტიკოსები (pin SHA, შეზღუდეთ გარე).

15) ანტიპატერები

იგივე ნაბიჯები ყველა რეპოში Reusable/Composite- ის ნაცვლად არის სტანდარტების რასინქრონი.
OIDC- ის ნაცვლად ცვლადი მრავალწლიანი საიდუმლოებები.
Environments/approvals- ის არარსებობა პროდუქტებისთვის.
მესამე მხარის Actions- ის არასასურველი ვერსიები supply-chain რისკებს წარმოადგენს.
არ არსებობს SBOM/ხელმოწერები; CD- ზე გადამოწმება არ არსებობს.
ყოველთვის გაშვებული მასიური მატრიცები ზრდის ღირებულებას.
CD Actions- დან პირდაპირ Productions- ში GitOps კვანძების შეცვლის გარეშე.

შედეგები

GitHub Actions საშუალებას გაძლევთ შექმნათ ერთიანი, უსაფრთხო და რეპროდუქციული გამოშვების კონვეიერი: სტანდარტიზებული plines Reusable/Composite- ით, გამოიყენეთ OIDC და გარშემორტყმული approvals- ით, შემოიღეთ SBOOM M N AN- ზე, გადაიტანეთ CD D D DOD D D ODODOOD DDOADODAAAAAOAAAAAAAAAAკონტროლი ქეში/მატრიცით/კონკურენტუნარიანობით. ეს მიდგომა ფართოვდება iGaming პროდუქტის ტემპით, ინარჩუნებს ხარისხს და ამცირებს ოპერაციულ რისკებს.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.