GitLab CI/CD para projetos iGaming
(Secção Tecnologia e Infraestrutura)
Resumo curto
GitLab CI/CD - «linha de montagem» para aplicativos, analistas e serviços ML iGaming. Ele combina repositório, pipline como código, gerenciamento de ambientes e segurança, seu próprio registro de contêineres/pacotes, integração com Kubernetes e Terraform e digitalização de vulnerabilidades e licenças. A chave para o sucesso são os mesmos modelos de pipline, runners efêmeros com skale automático, um modelo rigoroso de direitos e segredos, processos GitOps e controle de custo.
1) Arquitetura e papéis
GitLab (SaaS ou Self-Managed): grupos/projetos, Protected branches/tags, Merge Request Approvals.
Runners: Docker/Kubernetes/Virtual Machine executors. Podos efêmeros em K8s minimizam a deriva do ambiente.
Maiúsculas: Container/Paquage/Dependency Proxy - armazenando imagens e dependências básicas.
Observabilidade: job logs, job arts, pipeline insights, exportação de métricas para monitoramento.
Papéis: desenvolvedores (MR), maintainers (approve/release), SecOps (políticas de digitalização), Platform/DevOps (runners, modelos, GitOps).
2) Fundamentos '.gitlab-ci. yml ': estágios, regras, dependências
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" ]
Práticas:
- 'rulas' para ramais/MR/tags; 'needs' para o paralelismo DAG; 'artifacts: reports' para JUnit/coverage; 'workflow' - para não executar piplays extras.
3) Runners e skale automático
Kubernetes executor (recomendado)
Pods efêmeros, quotas CPU/RAM, nodeSelector/taints, isolamento de segredos.
Cash/artefatos: armazenamento de objetos; dependency proxy для NPM/Maven/PyPI/Docker.
Docker executor
Início simples; use DinD ou Kaniko/BuildKit para montar sem privilégios.
Dicas:- Grupos individuais de runners por tipo de carga (Build/Teste/Segurança/ML); limites de concurrency por grupo/projeto; marcas de classificação ('k8s', 'gpu', 'security').
4) Cash, artefatos e matrizes
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
Use dependency proxy global para economizar tráfego e tempo, split-tests por matriz, artifacts: expire _ in para higiene.
5) Segurança e conformidade (Shift-Left)
«Seguro-estágio» típico: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" }
Também: DAST para estandes, Dependency/License Compliance, MR-approvals obrigatórios para findings críticos, camuflagem de variáveis.
6) Ambientes, Review Apps e lançamentos
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: publicação da lista Helm/artefatos, geração de pontuação, assinatura de imagens.
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" ]
Adicione quality gates: SLO latency/error-rate a partir do monitoramento → resolução/reversão.
8) Parent/Child e pipas multiproduções
Parent/Child: acelera os grandes monorrepos (cada componente é child pipeline).
yaml trigger_components:
stage: build trigger:
include: [ "ci/component-a. yml", "ci/component-b. yml" ]
strategy: depend
Multi-Project: «Release» projeto desencadeia CD em um manifesto repo (GitOps).
9) GitOps и Terraform/IaC
GitOps por MR a um repositório manifesto
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) Segredos e acessibilidade
CI Variables: masked/protected; divida por ambientes/grupos.
Protected branches/tags: pod em prod - apenas de galhos protegidos e confirmação manual.
Segredos externos: integração com o Secret Manager/HashiCorp Vault (JWT/OIDC), montagem em runners apenas por tempo de job.
11) Observabilidade de piplins e SLO
Pipeline DORA/KPI: lead time, deployment frequency, change fail rate, MTTR.
Ferramentas: Retrações/temporizações, 'allow _ failure' para tarefas não bloqueadoras, relatório de cobertura de código.
Exportação de métricas: duração de estágios, fila de runners, sucess ratio; Alertas no ChatOps.
12) FinOps: custo e desempenho
Dependency Proxy + dinheiro das dependências e camadas do Docker.
Separação de poóis de runners (prod/segurança/ML) com limites de concurrency.
Pausa automática Review Apps e ambientes inativos; 'artifacts: expire _ in'.
Montagens de grande porte - em pool de spot/pré-sal; antes do aquecimento das imagens básicas.
13) Modelos para maletas iGaming
Serviço 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' } ]
modelo 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 }
Artefato 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) Folha de cheque de implementação
1. Defina os modelos de pipline e Shared Inclusive para comandos (lint/teste/build/security/deploy).
2. Expanda os runners K8s efêmeros e inclua os dependency proxy, o armazenamento de objetos para artefatos/cachê.
3. Digite rulas/needs/DAG, matrizes e paralelismo.
4. Configure SAST/DAST/Secret/SBOM/License e MR-approvals por políticas.
5. Organize o Enquironments/Review Apps, automático e URL cuidadosos.
6. Inclua GitOps: um manifesto repo, um bump de imagem/lista.
7. Gerencie os segredos (masked/protected, vault/OIDC), protected branches/tags.
8. Ligue o Terraform/IaC e o «monitoramento como código».
9. Digite práticas FinOps: limites de runners, dinheiro/proxy, artefatos expire, estandes automáticos.
10. Game-day regular: queda do runner, preenchimento do cachê, indisponibilidade do registro.
15) Antipattern
Um runner «universal» sem isolamento ou quotas.
Pipline sem 'rulas' («sempre»), sem 'needs' (devagar).
As montagens privilegiadas DinD em prod runners sem restrições.
Armazenamento de segredos no repositório/logs job.
Nenhum estágio seguro e MR-approvals.
Review Apps infinitas sem 'on _ stop' e 'expire _ in'.
Lançamentos manuais em prod sem protected tags.
Resumo
O GitLab CI/CD dá aos comandos iGaming lançamentos rápidos e previsíveis, como modelos unificados, scale runners automáticos, gates de segurança de qualidade, ambientes e deplois progressivos, GitOps e Integração Terraform. Adicione observabilidade e FinOps - e seus aplicativos, ETL e serviços ML serão produzidos regularmente, com segurança e com custo controlado.