Jenkins e pipline CI
(Secção Tecnologia e Infraestrutura)
Resumo curto
Jenkins continua a ser o «motor» universal da CI nas infraestruturas híbridas de iGaming, que reúne a montagem de aplicativos, contêineres, testes, verificação de segurança e publicação de artefatos. O sucesso é uma linha de montagem como código (Declarative/Multibranch), Shared Libraries, agentes efêmeros em Kubernetes, segurança e segredos rígidos, gerenciamento de configh GitOps e métricas de desempenho e custo.
1) Arquitetura de Jenkins em iGaming
Controlador (LTS) + agentes: mínimo de plugins no controlador; o trabalho é transferido para agentes.
Agentes efêmeros: lançamento em K8s/sob dinâmico 'jnlp' (início rápido, ambientes limpos).
Confinamento de trabalho: pastas/direitos (Folders + Role-Based Estraty), credenciamento de direitos menores.
Observabilidade: exportação de métricas (latency, fila), logs centralizados de estágios, trace-ID em pipas.
2) Pattern de pipas: Declarative e Multibranch
Quando Declarative: linhas de montagem padrão com estágios homogêneos, «post» claro - shags.
Quando o Script é um ramo raro «não convencional».
Multibranch: carro-pipline para cada ramo/PR; Políticas «apenas ramos ativos».
Base Declarative-pipline
groovy pipeline {
agent { label 'k8s' } // или agent { kubernetes {... } }
options {
timestamps()
ansiColor('xterm')
buildDiscarder(logRotator(numToKeepStr: '50'))
timeout(time: 30, unit: 'MINUTES')
disableConcurrentBuilds()
}
environment {
REGISTRY = 'registry. example. com'
IMAGE = "${env. REGISTRY}/payments:${env. GIT_COMMIT}"
}
stages {
stage('Checkout') {
steps { checkout(scm) }
}
stage('Lint & Unit') {
parallel {
stage('Lint') { steps { sh 'make lint' } }
stage('Unit') { steps { sh 'make test' } }
}
}
stage('SCA/SAST') {
steps {
sh'make deps_audit'//SCA (dependencies)
sh'make sast '//static analysis
}
}
stage('Build Image') {
steps { sh 'docker build -t $IMAGE. && docker push $IMAGE' }
}
stage('SBOM & Sign') {
steps {
sh 'syft $IMAGE -o spdx-json > sbom. json'
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
archiveArtifacts artifacts: 'sbom. json', fingerprint: true
}
}
}
post {
success { echo '+ Build OK' }
failure { echo '- Build failed'; sh 'printenv sort sed -n "1,50p"' }
always { cleanWs() }
}
}
3) Agentes Kubernetes e ambientes de contêiner
Exemplo de podTemplate (Declarative)
groovy pipeline {
agent {
kubernetes {
yaml """apiVersion: v1 kind: Pod spec:
serviceAccountName: jenkins containers:
- name: build image: docker:27-dind securityContext: { privileged: true }
- name: tools image: alpine:3. 20 command: ['cat']
tty: true
"""
defaultContainer 'tools'
}
}
stages {
stage('Build in DinD') {
steps {
container('build') {
sh '''
dockerd-entrypoint. sh & sleep 5 docker build -t $IMAGE.
docker push $IMAGE
'''
}
}
}
}
}
Prática: dinheiro de camadas através do geral 'emptyDir '/remote cachê; limites CPU/RAM; 'nodeSelector/taints' para separação de montagens pesadas.
4) Shared Libraries: DRY e padrões unificados
Carregue os passos compartilhados (lentes, SAST, montagem, publicação) na Shared Library.
groovy
// vars/withQuality. groovy def call(Closure body) {
stage('Quality Gate') {
parallel(
"Lint": { sh 'make lint' },
"Unit": { sh 'make test' },
"SCA": { sh 'make deps_audit' }
)
}
body()
}
Uso:
groovy
@Library('ci-lib@v3') _
pipeline {
agent any stages {
stage('Pipeline') {
steps {
withQuality {
sh 'make build'
}
}
}
}
}
Dicas: Versionize a biblioteca ('tags'), cubra com testes de passos unit, conduza CHANGELOG.
5) Segredos e credenciais
Credentials Binding: `usernamePassword`, `string`, `file`, `sshUserPrivateKey`.
Secret scopes: mínimo de direitos; use-o apenas nos estágios desejados.
Gerentes de segredos: provedores de armazenamento externo (KMS/Secret Manager/HashiCorp Vault).
groovy withCredentials([string(credentialsId: 'cosign-key', variable: 'COSIGN_KEY')]) {
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
}
6) Paralelismo, matrizes, dinheiro
Montagens Matrix
groovy stage('Test Matrix') {
matrix {
axes {
axis { name 'PY'; values '3. 10', '3. 12' }
axis { name 'DB'; values 'mysql', 'postgres' }
}
stages {
stage('Run') { steps { sh 'pytest -q' } }
}
post { always { junit 'reports/.xml' } }
}
}
Armazenamento em dinheiro: Docker layer cache, caixa de dependências ('£/.m2', '£/.cache/pip') em volume; artefatos entre estágios - através de 'stash/unstash' ou um depósito de artefatos.
7) Verificações de segurança e conformidade
SCA/SAST/Secret-scan em CI, DAST em ambiente separado.
SBOM (Syft/CycloneDX), assinatura de artefatos (cosign), política «sem assinatura - sem deploy».
Policy-gates: paragem do pipline em CVE crítico; relatórios em PR.
Caminhos PII: Não logar segredos, mascarar variáveis, agentes individuais para montagens sensíveis.
8) Publicação de artefatos e integração com CD
Registry: Docker/OCI com política de retenha, imutabilidade de marcas de formatação.
Package Repos: Maven/NPM/PyPI proxy+cache.
Desencadeadores de CD: envio de eventos para Argo CD/Flagger, ou criação de PR para o repositório de manifestos GitOps.
9) Jenkins Configuration as Code (JCasC) и GitOps
Mantenha o controlador de config como código, como os modelos jobs, cartões de crédito (links), RBAC, agentes.
yaml jenkins:
systemMessage: "Jenkins (iGaming CI)"
numExecutors: 0 authorizationStrategy:
roleBased:
roles:
global:
- name: "readers"
pattern: "."
permissions: ["Overall/Read"]
nodes:
- permanent:
name: "edge-builder"
remoteFS: "/home/jenkins"
labels: "docker"
unclassified:
location:
url: "https://ci. example. com/"
credentials:
system:
domainCredentials:
- credentials:
- string:
id: "cosign-key"
description: "Cosign key ref"
secret: "${COSIGN_KEY_FROM_ENV}"
Prática: config - em Git, revezamento PR, promoção dev→stage→prod; segredos - através de variáveis/gerentes externos.
10) Observabilidade, confiabilidade e custo
Métricas: fila, duração de estágios, porcentagem de reinício, largura de banda dos agentes.
Falhas: «retry», «timeout», «stable» - marcação de testes flaky, notificações em ChatOps.
FinOps: desligamento automático de agentes inativados, limites de montagens paralelas, quotas de pastas/comandos.
11) Pipas sob tarefas diferentes
Serviço Backend/Web
Lentes/units → SAST/SCA → Build → SBOM/Sign → Publish →.
Data/ETL
Verificação de padrão (dbt teste) → geração de artefatos → análise estática SQL → publicação de modelos e documentação.
ML/LLM
Verificação de dados/licenças → treinamento em agentes spot → exportação ONNX/TensorRT → testes de perf (latency/tocens/s) → assinatura e publicação do modelo.
12) Runabuki (incidentes típicos)
A fila cresce, adicionando agentes, verificando pipinas penduradas, limites de concurrency.
As montagens flutuam: pontuar as versões das ferramentas no contêiner do agente; desativar o shared workspace.
O segredo dos «patos» no logs é: remover os logs de build, substituir o crédito, fazer uma auditoria; adicionar camuflagem.
A queda do controlador: restauração do backup JCasC + armazenamento de DVDs/plugins é versionizada.
13) Folha de cheque de implementação
1. Jenkins LTS com um conjunto mínimo de plugins; O resto é para agentes.
2. Agentes de K8s efêmeros, limites de recursos, cachês layer.
3. Declarative/Multibranch, validação PR, 'post 4. Shared Livrarias com versionização; passos unificados de qualidade/segurança. 14) Antipattern Controlador como servidor de tudo: montagens pesadas e plugins nele mesmo. Jenkins continua a ser um núcleo de CI poderoso e flexível. Ao converter a configuração em código (JCasC), normalizar os passos na Shared Livraries, lançar montagens em agentes K8s efêmeros e incorporar segurança/assinatura/SBOM diretamente na linha de montagem, você terá lançamentos previsíveis, custo controlado e resistência às cargas de pico de iGaming.
5. Credentals Binding + segredos externos; Guindastes mínimos.
6. SCA/SAST/Secret-scan/DAST, SBOM e assinatura de imagens.
7. JCasC e GitOps gerenciamento de configh; O ciúme da mudança.
8. Métricas/alertas/ChatOps; Retrações/temporizações; Artefactos e revistas.
9. Políticas de armazenamento/retenção, higiene automática dos espaços de trabalho.
10. Runabooks documentados e game-day regulares.
Script ted-jobs sem versionização e código-revo.
Misturar segredos e logs; Creditos com direitos amplos.
Agentes são poucos/são constantes → à deriva ambientes, testes flaky.
Falta de SBOM/assinatura de artefatos e gates por CVE.
Controle manual de configh, sem JCasC/GitOps.Resumo