iGaming layihələri üçün GitLab CI/CD
(Bölmə: Texnologiya və Infrastruktur)
Qısa xülasə
GitLab CI/CD - iGaming proqramları, analitikası və ML xidmətləri üçün «konveyer» təchizatı. O, birləşdirir: repositor, kod kimi paylaynlar, ətraf mühitin və təhlükəsizliyin idarə edilməsi, öz konteyner/paket reyestri, Kubernetes və Terraform ilə inteqrasiya, həmçinin zəifliklərin və lisenziyaların taranması. Uğurun açarı eyni payplayn şablonları, avto skeylli efemer rannerləri, ciddi hüquq və sirr modeli, GitOps prosesləri və dəyər nəzarəti.
1) Memarlıq və rollar
GitLab (SaaS və ya Self-Managed): qruplar/layihələr, Protected branches/tags, Merge Request Approvals.
Runners: Docker/Kubernetes/Virtual Machine executors. K8s efemer podları mühitin sürüklənməsini minimuma endirir.
Registrlər: Container/Package/Dependency Proxy - əsas şəkilləri və asılılıqları önbelleğe alır.
Observability: job logs, job artifacts, pipeline insights, monitorinq metr ixrac.
Rollar: tərtibatçılar (MR), meynteynerlər (approve/release), SecOps (tarama siyasəti), Platform/DevOps (rannerlər, şablonlar, GitOps).
2) Əsasları '.gitlab-ci. yml ': mərhələlər, qaydalar, asılılıqlar
yaml stages: [lint, test, build, security, package, deploy]
variables:
DOCKER_DRIVER: overlay2
IMAGE: "$CI_REGISTRY_IMAGE/app:$CI_COMMIT_SHA"
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
.default:
image: alpine:3. 20 before_script: [ 'apk add --no-cache bash curl jq' ]
lint:
stage: lint script: [ "make lint" ]
rules: [ { if: '$CI_PIPELINE_SOURCE == "merge_request_event"' } ]
unit:
stage: test script: [ "make test" ]
artifacts:
when: always reports: { junit: "reports/junit. xml" }
needs: [ "lint" ]
build_image:
stage: build image: docker:27 services: [ 'docker:27-dind' ]
variables: { DOCKER_TLS_CERTDIR: "" }
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE.
- docker push $IMAGE cache:
key: "docker-${CI_COMMIT_REF_SLUG}"
paths: [ "/var/lib/docker" ]
policy: pull-push needs: [ "unit" ]
Təcrübələr:
- 'rules' üçün filiallar/MR/etiketlər; 'needs' üçün DAG paralellik; 'artifacts: reports' üçün JUnit/coverage; 'workflow' üçün əlavə paylaynları işə salmamaq.
3) Runner və avto skeyl
Kubernetes executor (tövsiyə olunur)
Efemer pod, CPU/RAM kvotaları, nodeSelector/taints, sirlərin izolyasiyası.
Cache/artefaktlar: obyekt saxlama; dependency proxy для NPM/Maven/PyPI/Docker.
Docker executor
Sadə başlanğıc; imtiyazları olmadan montaj üçün DinD və ya Kaniko/BuildKit istifadə edin.
Məsləhətlər:- Yük növlərinə görə ayrı-ayrı ranner hovuzları (Build/Test/Security/ML); qrup/layihə üçün concurrency limitləri; ('k8s', 'gpu', 'security').
4) Cache, artefaktlar və matrislər
yaml cache:
key: "pip-${CI_COMMIT_REF_SLUG}"
paths: [ "venv/", ".cache/pip/" ]
policy: pull-push
test:py:
stage: test parallel:
matrix:
- PY: ["3. 10", "3. 12"]
image: python:${PY}
script:
- python -m venv venv &&. venv/bin/activate
- pip install -r requirements. txt
- pytest -q
Trafik və vaxta qənaət etmək üçün qlobal dependency proxy istifadə edin, matris üzrə split tests, gigiyena üçün artifacts:expire_in.
5) Təhlükəsizlik və uyğunluq (Shift-Left)
Tipik «security-stage»:yaml sast:
stage: security image: registry. gitlab. com/security-products/sast:latest script: [ "analyzer run" ]
artifacts: { reports: { sast: "gl-sast-report. json" } }
rules: [ { if: '$CI_PIPELINE_SOURCE == "merge_request_event"' } ]
secret_detection:
stage: security image: registry. gitlab. com/security-products/secret-detection:latest script: [ "analyzer run" ]
artifacts: { reports: { secret_detection: "gl-secret-report. json" } }
sbom:
stage: security image: alpine:3. 20 script:
- apk add syft cosign
- syft $IMAGE -o cyclonedx-json > sbom. json
- cosign sign --key $COSIGN_KEY $IMAGE artifacts:
reports: { cyclonedx: "sbom. json" }
Həmçinin: stendlər üçün DAST, Dependency/License Compliance, kritik findings ilə məcburi MR-approvals, dəyişən maskalama.
6) Mühit, Review Apps və buraxılışlar
yaml review:
stage: deploy image: bitnami/kubectl environment:
name: review/$CI_COMMIT_REF_SLUG url: https://$CI_COMMIT_REF_SLUG. apps. example. com on_stop: stop_review script:
-./deploy. sh --env=review --image=$IMAGE rules: [ { if: '$CI_PIPELINE_SOURCE == "merge_request_event"' } ]
stop_review:
stage: deploy when: manual environment:
name: review/$CI_COMMIT_REF_SLUG action: stop script: [ "./deploy. sh --env=review --delete" ]
Release/Tag paypline: Helm-chart/artefaktların nəşri, buraxılış notlarının yaradılması, şəkillərin imzası.
7) Progressive delivery: canary/blue-green
yaml deploy_canary:
stage: deploy script: [ "./helm_upgrade. sh --set canary. weight=10 --image=$IMAGE" ]
environment: { name: production }
rules: [ { if: '$CI_COMMIT_TAG' } ]
promote_100:
stage: deploy when: manual script: [ "./helm_upgrade. sh --set canary. weight=100" ]
needs: [ "deploy_canary" ]
quality gates əlavə edin: SLO latency/error-rate monitorinqindən → icazə/geri dönüş.
8) Parent/Child və multiproekt paylaynlar
Parent/Child: böyük monorepo (hər komponent - child pipeline) sürətləndirir.
yaml trigger_components:
stage: build trigger:
include: [ "ci/component-a. yml", "ci/component-b. yml" ]
strategy: depend
Multi-Project: «Release» layihəsi CD-ni manifest repoya (GitOps) salır.
9) GitOps и Terraform/IaC
MR vasitəsilə GitOps
yaml gitops_bump:
stage: deploy image: alpine/git script:
- git clone $MANIFESTS_REPO manifests
- yq -i '.image = env(IMAGE)' manifests/apps/app/values. yaml
- cd manifests && git commit -am "bump $CI_COMMIT_SHA" && git push origin HEAD:$TARGET_BRANCH
Terraform в CI
yaml terraform:
stage: deploy image: hashicorp/terraform:1. 9 script:
- terraform init -backend-config="bucket=$TF_BUCKET"
- terraform plan -out tfplan
- terraform apply -auto-approve tfplan rules: [ { if: '$CI_COMMIT_BRANCH == "infra"'} ]
10) Sirləri və əlçatanları
CI Variables: masked/protected; ətraflara/qruplara bölün.
Protected branches/tags: prod-da deploy - yalnız qorunan filiallardan və əl təsdiqi ilə.
Xarici sirləri: Secrets Manager/HashiCorp Vault (JWT/OIDC) ilə inteqrasiya, yalnız job müddətində erkən montaj.
11) Payplayns və SLO müşahidə
Pipeline DORA/KPI: lead time, deployment frequency, change fail rate, MTTR.
Alətlər: retrai/taymautlar, bloklanmayan tapşırıqlar üçün 'allow _ failure', kodu əhatə edən hesabat.
Metrik ixrac: mərhələ müddəti, ranner növbəsi, success ratio; ChatOps-da alertlər.
12) FinOps: dəyəri və performans
Dependency Proxy + Docker asılılıq və qatları cache.
Ranner hovuzlarının ayrılması (prod/security/ML) concurrency limitləri ilə.
Avto-pauza Review Apps və aktiv olmayan mühitlər; 'artifacts: expire _ in'.
Böyük montajlar - spot/davamlı hovuzlarda; Əsas şəkilləri qızdırmadan əvvəl.
13) iGaming cases üçün şablonlar
Backend/API xidməti
yaml include: [ "ci/includes/security. yml", "ci/includes/docker. yml" ]
deploy_prod:
stage: deploy environment: { name: production, url: https://api. example. com }
script: [ "./helm_upgrade. sh --env=prod --image=$IMAGE" ]
rules: [ { if: '$CI_COMMIT_TAG' } ]
ETL/DBT modeli
yaml dbt_run:
stage: build image: ghcr. io/dbt-labs/dbt-snowflake:latest script: [ "dbt deps", "dbt run --profiles-dir. ", "dbt test" ]
artifacts: { paths: [ "target/" ], expire_in: 3 days }
ML/LLM artefakt
yaml ml_pack:
stage: package image: nvidia/cuda:12. 1. 0-runtime-ubuntu22. 04 tags: [ "gpu" ]
script:
- python export_onnx. py
- trtexec --onnx=model. onnx --saveEngine=model. plan artifacts: { paths: [ "model. plan", "model. onnx" ] }
14) Giriş çek siyahısı
1. Komandalar üçün payline və Shared Includes şablonlarını təyin edin (lint/test/build/security/deploy).
2. Efemer K8s-rannerləri yerləşdirin, dependency proxy, obyekt saxlama/cache.
3. rules/needs/DAG, matrislər və paralellik daxil edin.
4. SAST/DAST/Secret/SBOM/Lisans və MR-approvals siyasətlərini konfiqurasiya edin.
5. Environments/Review Apps, Avtomatik sifariş və səliqəli URL təşkil edin.
6. GitOps daxil edin: ayrı-ayrı manifest repo, MR-bump şəkillər/siyahılar.
7. Sirlərin idarə olunmasını təmin edin (masked/protected, Vault/OIDC), protected branches/tags.
8. Terraform/IaC və «kod kimi monitorinq» qoşun.
9. FinOps təcrübələrini daxil edin: ranner limitləri, cache/proxy, expire artefaktları, avtopauz stendləri.
10. Müntəzəm game-day: runner düşməsi, cache doldurulması, reyestr əlçatmazlığı.
15) Antipattern
təcrid və kvota olmadan bir «universal» ranner.
Payplaynlar 'rules' («həmişə»), 'needs' (yavaş-yavaş) olmadan.
Məhdudiyyətsiz prod-rannerlərdə imtiyazlı DinD montajları.
Sirləri saxlama/job.
security mərhələsi və MR-approvals yoxdur.
'on _ stop' və 'expire _ in' olmadan sonsuz Review Apps.
protected tags olmadan prod əl buraxılışları.
Nəticələr
GitLab CI/CD iGaming komandalarına sürətli və proqnozlaşdırıla bilən buraxılışlar verir: vahid şablonlar, runner avto skeylləri, keyfiyyətli təhlükəsizlik geytləri, mühit və mütərəqqi deplolar, GitOps və Terraform inteqrasiyası. Müşahidə və FinOps əlavə edin - və tətbiqləriniz, ETL və ML xidmətləriniz müntəzəm, təhlükəsiz və nəzarət olunan qiymətlərlə veriləcək.