Conducte Jenkins și CI
(Secțiunea: Tehnologie și infrastructură)
Scurt rezumat
Jenkins rămâne „motorul” universal al CI în infrastructurile hibride iGaming: integrează asamblarea aplicațiilor, containerizarea, testarea, validarea securității și publicarea artefactelor. Succesul este o conductă ca cod (Declarative/Multibranch), Biblioteci partajate, agenți efemeri în Kubernetes, securitate și secrete dure, gestionarea GitOps a configurării și măsurători de performanță și costuri.
1) Arhitectura Jenkins pentru iGaming
Controler (LTS) + agenți: plugin-uri minime pe controler; lucrarea este transferată agenților.
Agenți efemeri: rulează într- K8s/under „jnlp” dinamic (pornire rapidă, medii curate).
Izolarea muncii: foldere/drepturi (Foldere + Strategie bazată pe rol), credite pentru cele mai mici drepturi.
Observabilitate: export de valori (latență, coadă), jurnale de etapă centralizate, ID-ul urmelor în conducte.
2) Modele de conducte: declarative și multibranch
Când declarativ: conducte standard cu etape uniforme, etape clare „post”.
Când Scripted: Ramuri rare „personalizate”.
Multibranch: auto-conductă pentru fiecare ramură/PR; politici de ramură activă numai.
Conductă declarativă de bază
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) Kubernetes agenți și medii de containere
Exemplu podTemplate (Declarativ)
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
'''
}
}
}
}
}
Practică: memorie cache strat prin intermediul comun „golDir ”/memorie cache la distanță; CPU/RAM; limitele „nodeSelector/cauciucuri” pentru separarea ansamblurilor grele.
4) Biblioteci partajate: standarde uscate și uniforme
Scoateți pași comuni (lintere, SAST, asamblare, publicare) în Biblioteca partajată.
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()
}
Utilizare:
groovy
@Library('ci-lib@v3') _
pipeline {
agent any stages {
stage('Pipeline') {
steps {
withQuality {
sh 'make build'
}
}
}
}
}
Sfaturi: versiunea bibliotecii ('tag-uri'), acoperă cu teste de unitate de pași, păstrați CHANGELOG.
5) Secretele și acreditările
Acreditări obligatorii: „usernamePassword”, „string”, „file”, „sshUserPrivateKey”.
Scopuri secrete: drepturi minime; utilizați numai la etapele corecte.
Manageri secreți: furnizori de depozite externe (KMS/Secrets Manager/HashiCorp Vault).
groovy withCredentials([string(credentialsId: 'cosign-key', variable: 'COSIGN_KEY')]) {
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
}
6) Concurență, matrice, cache
Ansambluri de matrice
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' } }
}
}
Caching: Memorie cache strat Docker, memorie cache dependență ('~/.m2', '~/.cache/pip') pe volum; artefacte între etape - prin „stash/unstash” sau depozitare artefact.
7) Controale de siguranță și conformitate
SCA/SAST/Secret-scan în CI, DAST într-un mediu separat.
SBOM (Syft/CycloneDX), semnătură artefact (cosign), nesemnat-nici o politică de implementare.
Porțile de politică: oprirea conductei pentru CVE-urile critice; rapoarte în PR.
Contururi PII: nu înregistrați secrete, variabile de mască, agenți separați pentru ansambluri sensibile.
8) Editarea artefactelor și integrarea CD-urilor
Registry: Docker/OCI cu politica de retentie, etichete imunitate.
Pachetul Repos: Maven/NPM/PyPI proxy + cache.
Declanșatoare CD: trimiterea evenimentelor la Argo CD/Flagger, sau crearea PR în depozitul manifest GitOps.
9) Jenkins Configurare ca cod (JCasC) и GitOps
Păstrați configurarea controlerului ca cod: locuri de muncă șablon, credite (link-uri), RBAC, agenți.
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}"
Practică: config - în Git, revizuire PR, promovare dev→stage→prod; secrete - prin variabile/manageri externi.
10) Observabilitate, fiabilitate și cost
Valori: coadă, durata etapelor, procentul de reporniri, debitul de agenți.
Eșecuri: „încercați din nou”, „timeout”, „stabil” marcarea testelor cu fulgi, notificări în ChatOps.
FinOps: auto-shutdown de agenți inactivi, limite de asamblare concurente, dosare/cote de comandă.
11) Conducte pentru diferite sarcini
Servicii Backend/Web
Lint/Unități SAST/SCA Build SBOM/Sign Publish (declanșator CD).
Date/ETL
→ de testare dbt generează artefacte → analiză statică SQL → publică modele și documentație.
ML/LLM
Verificarea datelor/licențelor → instruirea în agenții spot → ONNX/TensorRT → testele perf (latență/jetoane/s) → semnarea și publicarea modelului.
12) Runabooks (incidente tipice)
Coada este în creștere: adăugați agenți, verificați conductele „suspendate”, limitele de concurență.
Ansambluri float: kick versiuni de unelte în recipientul agent; dezactivați spațiul de lucru partajat.
Secretul „scurgeri” la jurnalele: ștergeți build busteni, înlocuiți creditul, efectuați un audit; adăugați mascare.
Drop controler: de recuperare de la backup JCasC + de locuri de muncă/plugin de stocare este versionat.
13) Lista de verificare a implementării
1. Jenkins LTS cu un set minim de plugin-uri; orice altceva este în agenți.
2. Agenți K8s efemeri, limite de resurse, cache-uri strat.
3. Declarative/Multibranch, PR validation, 'post {always {cleanWs ()}}'.
4. Biblioteci partajate cu versioning; pași uniformi de calitate/siguranță.
5. Acreditări Legare + secrete externe; scopuri minime.
6. SCA/SAST/Secret-scan/DAST, SBOM și semnătura imaginii.
7. Gestionarea configurațiilor JCasC și GitOps; Revizuirea PR a modificărilor.
8. Metrici/alerte/ChatOps; retrageri/timeout-uri; artefacte și reviste.
9. Politici de stocare/retenție, auto-igienă a spațiilor de lucru.
10. Hoinari documentate și zile regulate de joc.
14) Antipattern
Controler „ca un server de tot”: ansambluri grele și plugin-uri pe ea.
Lucrări scriptate fără versioning și revizuirea codului.
Amestecarea secretelor și jurnalelor; împrumuturi cu drepturi largi.
Agenții sunt puțini/sunt medii constante → derivă, teste fulgi.
Absența SBOM/semnătura artefactelor și porților de către CVE.
„Manual” de control al configurației, fără JCasC/GitOps.
Rezumat
Jenkins rămâne un nucleu CI puternic și flexibil. Prin traducerea configurației în cod (JCasC), standardizarea pașilor în Biblioteci partajate, rularea se bazează pe agenți de K8s efemeri și încorporarea securității/semnăturii/SBOM direct în conductă, obțineți versiuni previzibile, costuri controlate și reziliență la sarcină maximă iGaming.