GH GambleHub

GitLab CI/CD для iGaming-проектів

(Розділ: Технології та Інфраструктура)

Коротке резюме

GitLab CI/CD - «конвеєр» поставки для додатків, аналітики і ML-сервісів iGaming. Він об'єднує: репозиторій, пайплайни як код, управління оточеннями і безпекою, власний реєстр контейнерів/пакетів, інтеграції з Kubernetes і Terraform, а також сканування вразливостей і ліцензій. Ключ до успіху - однакові шаблони пайплайнів, ефемерні раннери з авто-скейлом, сувора модель прав і секретів, GitOps-процеси і контроль вартості.

1) Архітектура і ролі

GitLab (SaaS или Self-Managed): групи/проекти, Protected branches/tags, Merge Request Approvals.
Runners: Docker/Kubernetes/Virtual Machine executors. Ефемерні поди в K8s мінімізують дрейф середовища.
Регістри: Container/Package/Dependency Proxy - кешують базові образи і залежності.
Observability: job logs, job artifacts, pipeline insights, експорт метрик в моніторинг.

Ролі: розробники (MR), мейнтейнери (approve/release), SecOps (політики сканування), Platform/DevOps (раннери, шаблони, GitOps).

2) Основи'.gitlab-ci. yml`: стадії, правила, залежності

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" ]
Практики:
  • 'rules'для гілок/MR/тегів;'needs'для DAG-паралелізму;'artifacts:reports'для JUnit/coverage;'workflow'- щоб не запускати зайві пайплайни.

3) Раннери і авто-скейл

Kubernetes executor (рекомендується)

Ефемерні поди, квоти CPU/RAM, nodeSelector/taints, ізоляція секретів.
Кеш/артефакти: об'єктне сховище; dependency proxy для NPM/Maven/PyPI/Docker.

Docker executor

Простий старт; використовуйте DinD або Kaniko/BuildKit для складання без привілеїв.

Поради:
  • Окремі пули раннерів за типами навантажень (Build/Test/Security/ML); ліміти concurrency на групу/проект; теги раннерів («k8s», «gpu», «security»).

4) Кеш, артефакти і матриці

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

Використовуйте глобальний dependency proxy для економії трафіку і часу, split-tests по матриці, artifacts:expire_in для гігієни.

5) Безпека та відповідність (Shift-Left)

Типовий «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" }

Так само: DAST для стендів, Dependency/License Compliance, обов'язкові MR-approvals при критичних findings, маскування змінних.

6) Оточення, Review Apps і релізи

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 пайплайн: публікація Helm-чарту/артефактів, генерація реліз-нотів, підпис образів.

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: SLO latency/error-rate з моніторингу → дозвіл/відкат.

8) Parent/Child і мультипроектні пайплайни

Parent/Child: прискорюють великі монорепо (кожен компонент - child pipeline).

yaml trigger_components:
stage: build trigger:
include: [ "ci/component-a. yml", "ci/component-b. yml" ]
strategy: depend

Multi-Project: «Release» проект тригерит CD в маніфест-репо (GitOps).

9) GitOps и Terraform/IaC

GitOps через MR в маніфест-репозиторій

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) Секрети та доступи

CI Variables: masked/protected; поділяйте по оточеннях/групах.
Protected branches/tags: деплою в prod - тільки із захищених гілок і з ручним підтвердженням.
Зовнішні секрети: інтеграції з Secrets Manager/HashiCorp Vault (JWT/OIDC), монтування на раннерах тільки на час job.

11) Спостережуваність пайплайнів і SLO

Pipeline DORA/KPI: lead time, deployment frequency, change fail rate, MTTR.
Інструменти: ретраї/таймаути,'allow _ failure'для не-блокуючих завдань, звіт покриття коду.
Експорт метрик: тривалість стадій, черга раннерів, success ratio; алерти в ChatOps.

12) FinOps: вартість і продуктивність

Dependency Proxy + кеш залежностей і шарів Docker.
Розділення пулів раннерів (prod/security/ML) з лімітами concurrency.
Авто-пауза Review Apps і неактивних середовищ;'artifacts:expire_in`.
Великі збірки - на spot/преемптабельних пулах; прогрів базових образів.

13) Шаблони для iGaming-кейсів

Backend/API сервіс

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 модель

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 артефакт

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) Чек-лист впровадження

1. Визначте шаблони пайплайнів і Shared Includes для команд (lint/test/build/security/deploy).
2. Розгорніть ефемерні K8s-раннери, увімкніть dependency proxy, об'єктний storage для артефактів/кешу.
3. Введіть rules/needs/DAG, матриці і паралелізм.
4. Налаштуйте SAST/DAST/Secret/SBOM/License і MR-approvals за політиками.
5. Організуйте Environments/Review Apps, автозакриття і акуратні URL.
6. Увімкніть GitOps: окремий маніфест-репо, MR-бамп образів/чартів.
7. Забезпечте управління секретами (masked/protected, Vault/OIDC), protected branches/tags.
8. Підключіть Terraform/IaC і «моніторинг як код».
9. Введіть FinOps-практики: ліміти раннерів, кеш/проксі, expire артефактів, автопауза стендів.
10. Регулярні game-day: падіння раннера, заповнення кешу, недоступність реєстру.

15) Антипатерни

Один «універсальний» раннер без ізоляції і квот.
Пайплайни без'rules'( запускаються «завжди»), без'needs'( повільно).
Привілейовані збірки DinD в прод-раннерах без обмежень.
Зберігання секретів в репозиторії/в логах job.
Відсутність security-стадії і MR-approvals.
Нескінченні Review Apps без'on _ stop'і'expire _ in'.
Ручні релізи в prod без protected tags.

Підсумки

GitLab CI/CD дає iGaming-командам швидкі і передбачувані релізи: єдині шаблони, авто-скейл раннерів, якісні гейти безпеки, середовища і прогресивні деплої, GitOps і Terraform-інтеграцію. Додайте спостережуваність і FinOps - і ваші додатки, ETL і ML-сервіси будуть випускатися регулярно, безпечно і з контрольованою вартістю.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.