GH GambleHub

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.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.