GitLab CI/CD iGaming projeleri için
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
GitLab CI/CD, iGaming uygulamaları, analitik ve ML hizmetleri için bir dağıtım hattıdır. Bilgi havuzu, kod olarak boru hatları, çevre ve güvenlik yönetimi, kendi konteyner/paket kayıt defteri, Kubernetes ve Terraform ile entegrasyonların yanı sıra güvenlik açığı ve lisans taramasını birleştirir. Başarının anahtarı aynı boru hattı şablonları, otomatik skale ile geçici koşucular, katı haklar ve sırlar modeli, GitOps süreçleri ve maliyet kontrolüdür.
1) Mimari ve roller
GitLab (SaaS veya Self-Managed): gruplar/projeler, Korumalı dallar/etiketler, Birleştirme İsteği Onayları.
Koşucular: Docker/Kubernetes/Virtual Machine yürütücüleri. K8s geçici ocaklar orta sürüklenmeyi en aza indirir.
Registers: Container/Package/Dependency Proxy - temel görüntüleri ve bağımlılıkları önbelleğe alın.
Gözlemlenebilirlik: iş kayıtları, iş artifaktları, boru hattı içgörüleri, metrikleri izlemeye dışa aktarma.
Roller: Geliştiriciler (MR), geliştiriciler (onayla/bırak), SecOps (tarama politikaları), Platform/DevOps (koşucular, şablonlar, GitOps).
2) Temel bilgiler '.gitlab-ci. yml ': aşamalar, kurallar, kısıtlamalar
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" ]
Uygulamalar:
- Dallar/MR/etiketler için 'doğrular'; DAG paralelliği için 'değerler'; JUnit/kapsama için 'artifacts: raporları'; 'workflow' - gereksiz boru hatlarını çalıştırmamak için.
3) Koşucular ve otomatik ölçek
Kubernetes yürütücüsü (önerilir)
Geçici bölmeler, CPU/RAM kotaları, nodeSelector/tains, gizli izolasyon.
Önbellek/artifacts: nesne depolama; NPM/Maven/PyPI/Docker для bağımlılık.
Docker yürütücüsü
Basit başlangıç; Ayrıcalıksız oluşturmak için DinD veya Kaniko/BuildKit kullanın.
Konseyler:- Yük türlerine göre ayrı koşucu havuzları (Yapı/Test/Güvenlik/ML); Grup/proje başına eşzamanlılık sınırları; Koşucu etiketleri ('k8s', 'gpu', 'security').
4) Önbellek, eserler ve matrisler
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 ve zamandan tasarruf etmek için global bağımlılık proxy'sini kullanın, matrise göre bölünmüş testler, hijyen için artifacts:expire_in.
5) Güvenlik ve uyumluluk (Shift-Left)
Tipik "güvenlik aşaması":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" }
Ayrıca: Standlar için DAST, Bağımlılık/Lisans Uyumu, kritik bulgular için zorunlu MR onayları, maskeleme değişkenleri.
6) Ortamlar, İnceleme Uygulamaları ve Sürümler
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 pipeline: Helm chart/artifacts yayınlama, sürüm notları oluşturma, görüntüleri imzalama.
7) Aşamalı teslimat: kanarya/mavi-yeşil
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" ]
Kalite kapıları ekleyin: İzlemeden SLO gecikmesi/hata oranı - çözünürlük/geri alma.
8) Ebeveyn/Çocuk ve çok projeli boru hatları
Üst/Alt: Büyük monorepoları hızlandırır (her bileşen bir alt boru hattıdır).
yaml trigger_components:
stage: build trigger:
include: [ "ci/component-a. yml", "ci/component-b. yml" ]
strategy: depend
Çoklu Proje: "Release'projesi, CD'yi repo (GitOps) tezahür ettirmek için tetikler.
9) GitOps и Terraform/IaC
GitOps, depoyu tezahür ettirmek için MR aracılığıyla
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) Sırlar ve erişimler
CI Değişkenleri: maskelenmiş/korumalı; Çevreye/gruba göre ayrılır.
Korumalı dallar/etiketler: prod'da serbest bırakın - sadece korunan dallardan ve manuel onay ile.
Dış sırlar: Secrets Manager/HashiCorp Vault (JWT/OIDC) ile entegrasyonlar, sadece iş süresince koşuculara montaj.
11) Boru hattı ve SLO gözlemlenebilirliği
Boru hattı DORA/KPI: teslim süresi, dağıtım frekansı, değişim başarısızlık oranı, MTTR.
Araçlar: Retrays/timeouts, engellemeyen görevler için 'allow _ failure', kod kapsama raporu.
İhracat metrikleri: aşamaların süresi, koşucu kuyruğu, başarı oranı; ChatOps'ta uyarılar.
12) FinOps: maliyet ve performans
Dependency Proxy + Docker bağımlılığı ve katman önbelleği.
Eşzamanlılık sınırları olan bölünmüş koşucu havuzları (prod/security/ML).
Otomatik duraklatma İnceleme Uygulamaları ve etkin olmayan ortamlar; 'artifacts: expire _ in'.
Büyük montajlar - spot/prefabrik havuzlarda; Temel görüntülerin ön ısıtılması.
13) iGaming durumları için şablonlar
Arka uç/API hizmeti
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 artifakı
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) Uygulama kontrol listesi
1. Boruları tanımlayın ve komutlar için Paylaşılan Dahil desenleri (tiftik/test/yapı/güvenlik/dağıtım).
2. Geçici K8s koşucularını dağıtın, bağımlılık proxy'sini etkinleştirin, eserler/önbellek için nesne depolama.
3. Kurallar/ihtiyaçlar/DAG, matrisler ve eşzamanlılık girin.
4. SAST/DAST/Secret/SBOM/License ve MR onaylarını politikaya göre yapılandırın.
5. Ortamları Düzenle/Uygulamaları Gözden Geçir, otomatik olarak kapat ve düzgün URL'ler.
6. GitOps dahil: bağımsız manifesto repo, MR-bump görünüyor/grafikler.
7. Gizli yönetim (maskelenmiş/korumalı, Vault/OIDC), korumalı dallar/etiketler sağlayın.
8. Terraform/IaC'yi bağlayın ve "kod olarak izleyin".
9. FinOps uygulamalarını girin: koşucu sınırları, önbellek/proxy, son kullanma tarihi geçmiş eserler, otomatik duraklatma standları.
10. Normal oyun günleri: koşucu bırakma, önbellek doldurma, kayıt defteri bulunamazlığı.
15) Antipatterns
İzolasyon ve kotalar olmadan bir "evrensel" koşucu.
'Kurallar' olmadan boru hatları ('her zaman 'çalıştırın),' ihtiyaçlar 'olmadan (yavaşça).
Ayrıcalıklı DinD sınırsız üretim koşucuları oluşturur.
Depo/iş günlüklerinde sırların saklanması.
Güvenlik aşaması ve MR onayları eksikliği.
'On _ stop've' expire _ in 'olmadan Sonsuz İnceleme Uygulamaları.
Prod'da korumalı etiketler olmadan manuel sürümler.
Özet
GitLab CI/CD, iGaming ekiplerine hızlı ve öngörülebilir sürümler sunar: tek tip şablonlar, otomatik skale koşucuları, yüksek kaliteli güvenlik kapıları, ortamlar ve aşamalı deplolar, GitOps ve Terraform entegrasyonu. Gözlemlenebilirlik ve FinOps ekleyin - uygulamalarınız, ETL ve ML hizmetleriniz düzenli, güvenli ve kontrollü bir maliyetle yayınlanacaktır.