GH GambleHub

Jenkins we CI paýlaýynlary

(Bölüm: Tehnologiýalar we infrastruktura)

Gysgaça gysgaça

Jenkins iGaming gibrid infrastrukturalarynda CI-iň ähliumumy "hereketlendirijisi" bolup galýar: programmalary ýygnamagy, konteýnerleşdirmegi, synaglary, howpsuzlygy barlamagy we artefaktlary çap etmegi birleşdirýär. Üstünlik - kod (Declarative/Multibranch), Shared Libraries, Kubernetesdäki efemer agentleri, berk howpsuzlyk we syrlar, GitOps-konweýt dolandyryşy, şeýle hem öndürijilik we çykdajy metrikleri ýaly konweýer.

1) iGaming astynda Jenkins arhitekturasy

Controller (LTS) + agentler: gözegçide iň az plugin; iş agentlere geçirilýär.
Efemer agentleri: K8s/-de dinamiki 'jnlp' (çalt başlamak, arassa gurşaw).
Işiň izolýasiýasy: bukjalar/hukuklar (Folders + Role-Based Strategy), iň az hukuklar boýunça kredenşly.
Observability: eksport metrikler (latency, nobat), merkezleşdirilen sahypalar, pay-laynlarda trays-ID.

2) Paýlaýynlaryň patternleri: Declarative we Multibranch

Haçan-da Declarative: birmeňzeş basgançakly standart konweýerler, aýdyň 'post' ädimleri.
Haçan Scripted: seýrek "standart däl" şahalar.
Multibranch: her şahasy/PR üçin awto-paypline; syýasatçylar "diňe işjeň şahalar".

Esasy Declarative-paypline

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-agentler we konteýner gurşawy

PodTemplate (Declarative) mysaly

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
'''
}
}
}
}
}

Amal: umumy 'emptyDir '/remote cache arkaly gatlaklary kesmek; CPU/RAM çäkleri; 'nodeSelector/taints' agyr ýygnaklary bölmek üçin.

4) Shared Libraries: DRY we bitewi standartlar

Umumy kitaphanada umumy ädimleri (linterler, SAST, ýygnamak, neşir etmek) geçiriň.

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()
}
Ulanyş:
groovy
@Library('ci-lib@v3') _
pipeline {
agent any stages {
stage('Pipeline') {
steps {
withQuality {
sh 'make build'
}
}
}
}
}

Maslahatlar: kitaphanany wersiýa ediň ('tags'), ädimleriň bitewi synaglary bilen örtüň, CHANGELOG-a ýolbaşçylyk ediň.

5) Syrlar we hasaba alyş maglumatlary

Credentials Binding: `usernamePassword`, `string`, `file`, `sshUserPrivateKey`.
Secret scopes: iň az hukuk; diňe zerur tapgyrlarda ulanmak.
Gizlin dolandyryjylar: daşarky ammar üçin üpjün edijiler (KMS/Secrets Manager/HashiCorp Vault).

groovy withCredentials([string(credentialsId: 'cosign-key', variable: 'COSIGN_KEY')]) {
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
}

6) Parallelizm, matrisa, keş

Matrix gurma

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' } }
}
}

Kesmek: Docker layer cache, garaşlylyk kesesi ('~/.m2', '~/.cache/pip'); tapgyrlaryň arasyndaky artefaktlar - 'stash/unstash' ýa-da artefakt-ammar arkaly.

7) Howpsuzlygy we laýyklygy barlamak

SCA/SAST/Secret-scan-da CI, DAST-da aýratyn gurşawda.
SBOM (Syft/CycloneDX), artefaktlaryň goly (cosign), "golsyz - deploi ýok" syýasaty.
Policy-geýt: möhüm CVE-de paýlaýjyny duruzmak; PR hasabatlary.
PII konturlary: syrlary ýazga geçirmezlik, üýtgeýjileri, duýgur gurnama üçin aýry-aýry agentleri gizlemezlik.

8) Artefaktlary çap etmek we CD bilen integrasiýa

Registry: Docker/OCI retenşn syýasaty, tag immutability.
Package Repos: Maven/NPM/PyPI proxy+cache.
CD-triggerler: Argo CD/Flagger-e wakalary ibermek ýa-da GitOps-manifest ammaryna PR döretmek.

9) Jenkins Configuration as Code (JCasC) и GitOps

Dolandyryjyny kod hökmünde saklaň: jobi-şablonlar, kredenşllar (baglanyşyklar), RBAC, agentler.

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}"

Tejribe: - Git, PR-revyu, dev → stage → prod mahabaty; syrlar - üýtgeýän/daşarky dolandyryjylar arkaly.

10) Syn edilmegi, ygtybarlylygy we bahasy

Metrikler: nobat, tapgyrlaryň dowamlylygy, gaýtadan başlamagyň göterimi, agentleriň geçirijilik ukyby.
Şowsuzlyklar: 'retry', 'timeout', 'stable' - flaky-synaglaryň belligi, ChatOps-daky habarnamalar.
FinOps: boş duran agentleri awto öçürmek, paralel gurnamalaryň çäkleri, bukjalar/toparlar boýunça kwotalar.

11) Dürli wezipeler üçin paýlaýynlar

Backend/Web hyzmaty

Lint/units → SAST/SCA → Build → SBOM/Sign → Publish → (CD tetigi).

Data/ETL

Shemalary barlamak (dbt test) → artefaktlary döretmek → SQL-iň statiki derňewi → modelleri we resminamalary çap etmek.

ML/LLM

Maglumatlary/ygtyýarnamalary barlamak → spot-agentlerde okuw → eksport ONNX/TensorRT → perf-synaglar (latency/tokens/s) → gol we modeliň çap edilmegi.

12) Runabuki (adaty hadysalar)

Nobat artýar: agentleri goşmak, "asylan" paýlaýnlary, concurrency çäklerini barlamak.
Gurnama ýüzýär: agentiň konteýnerinde gurallaryň wersiýalaryny urmak; shared workspace-i öçürmek.
Logda "syzmagyň" syry: build-loglary aýyrmak, kredenşl çalyşmak, audit geçirmek; gizlemegi goşuň.
Dolandyryjynyň ýykylmagy: JCasC backup + job/plugin ammaryndan dikeldiş wersiýasy.

13) Girizmegiň çek-sanawy

1. Iň az plugin toplumy bolan Jenkins LTS; galanlary - agentlere.
2. Efemer K8s-agentler, resurs çäkleri, layer-keşler.
3. Declarative/Multibranch, PR-tassyklama, 'post {always {cleanWs ()}}'.
4. "Shared Libraries" wersiýasy bilen; hil/howpsuzlygyň bitewi ädimleri.
5. Credentials Binding + daşarky syrlar; iň az satyn almak.
6. SCA/SAST/Secret-scan/DAST, SBOM we şekilleriň goly.
7. JCasC we GitOps-konweýt dolandyryşy; Üýtgeşmeleriň PR barlagy.
8. Metrikler/alertler/ChatOps; retrailer/wagtlar; artefaktlar we žurnallar.
9. Saklamak/retensiýa syýasaty, iş ýerleriniň awto-arassaçylygy.
10. Dokumentleşdirilen runabuklar we yzygiderli game-day.

14) Antipatternler

Dolandyryjy "hemme zadyň serweri hökmünde": agyr ýygnaklar we üstündäki pluginler.
Scripted-joblar wersiýa we kod-revyu bolmazdan.
Syrlary we ýazgylary garyşdyrmak; giň hukukly kredenşly.
Agentler az/olar hemişelik → gurşawyň süýşmegi, flaky-synaglar.
CVE boýunça artefaktlaryň we geýtleriň SBOM/golunyň ýoklugy.
"El bilen" konfigurasiýa dolandyryşy, JCasC/GitOps ýok.

Netijeler

Jenkins güýçli we çeýe CI ýadrosy bolup galýar. Konfigurasiýany koda (JCasC) geçirmek, Shared Libraries-de ädimleri standartlaşdyrmak, efemer K8s agentlerinde ýygnanyşyklary başlamak we howpsuzlyk/gol/SBOM gönüden-göni konweýerde ýerleşdirmek bilen, öňünden aýdyp boljak goýberilişleri, gözegçilik edilýän bahany we iGaming iň ýokary ýüklerine garşylygy alarsyňyz

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.