GH GambleHub

Jenkins va payplaynlar CI

(Bo’lim: Texnologiyalar va infratuzilma)

Qisqacha xulosa

Jenkins iGaming gibrid infratuzilmalarida CI ning universal «dvigateli» boʻlib qolmoqda: u ilovalarni yigʻish, konteynerlashtirish, testlar, xavfsizlikni tekshirish va artefaktlarni nashr qilishni birlashtiradi. Muvaffaqiyat - bu kod (Declarative/Multibranch), Shared Libraries, Kubernetesdagi efemer agentlari, qattiq xavfsizlik va sirlar, GitOps-konfiguratsiyani boshqarish, shuningdek, unumdorlik va qiymat metrikalari kabi konveyerdir.

1) iGaming ostida Jenkins arxitekturasi

Controller (LTS) + agentlar: boshqaruvchida minimal plaginlar; ish agentlarga o’tkaziladi.
Efemer agentlar: dinamik’jnlp’ostida K8s/ishga tushirish.
Ishlarni izolyatsiya qilish: fayllar/huquqlar (Folders + Role-Based Strategy), eng kichik huquqlar bo’yicha kredenshli.
Observability: eksport metrik (latency, navbat), markazlashtirilgan bosqich loglari, payplaynlarda treys-ID.

2) Payplaynlar patternlari: Declarative va Multibranch

Declarative: bir xil bosqichli standart konveyerlar, aniq’post’-qadamlar.
Scripted: noyob «nostandart» shoxobchalar.
Multibranch: har bir shoxobcha/PR uchun avto-payplayn; «faqat faol filiallar» siyosati.

Bazaviy 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-agentlar va konteyner muhitlari

PodTemplate (Declarative) namunasi

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

Amaliyot: umumiy’emptyDir ’/remote cache orqali qatlamlarni kesh qilish; og’ir yig’imlarni ajratish uchun CPU/RAM limitlari;’nodeSelector/taints’.

4) Shared Libraries: DRY va yagona standartlar

Shared Library’da umumiy qadamlar (linterlar, SAST, yigʻish, nashr etish).

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

Maslahatlar: kutubxonani versiya qiling (’tags’), qadamlar unit testlari bilan qoplang, CHANGELOG’ni boshqaring.

5) Sirlar va hisob ma’lumotlari

Credentials Binding: `usernamePassword`, `string`, `file`, `sshUserPrivateKey`.
Secret scopes: minimal huquqlar; faqat zarur bosqichlarda foydalanish.
Maxfiy menejerlar: tashqi saqlash uchun provayderlar (KMS/Secrets Manager/HashiCorp Vault).

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

6) Parallelizm, matritsalar, kesh

Matrix toʻplamlari

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

Keshlash: Docker layer cache, bogʻliqlik keshi (’~/.m2’,’~/.cache/pip’) bosqichlar orasidagi artefaktlar -’stash/unstash’yoki artefakt-saqlash ombori orqali.

7) Xavfsizlikni va muvofiqlikni tekshirish

SCA/SAST/Secret-scan - CI, DAST - alohida muhitda.
SBOM (Syft/CycloneDX), artefaktlar imzosi (cosign), «imzosiz - deploy yo’q» siyosati.
Policy-geytlar: kritik CVElarda payplaynni to’xtatish; PR hisobotlari.
PII konturlari: sirlarni yoritmaslik, o’zgaruvchanlarni, sezgir yig’ilishlar uchun alohida agentlarni yashirmaslik.

8) Artefaktlarni chop etish va CD bilan integratsiya qilish

Registry: Docker/OCI retenshn siyosati, immutability taglar bilan.
Package Repos: Maven/NPM/PyPI proxy+cache.
CD triggerlar: voqealarni Argo CD/Flagger ga yuborish yoki GitOps manifestlar omboriga PR yaratish.

9) Jenkins Configuration as Code (JCasC) и GitOps

Nazoratchini kod sifatida saqlang: jobi-shablonlar, kredenshli (havolalar), RBAC, agentlar.

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

Amaliyot: - Git, PR-revyu, promoushen dev → stage → prod; sirlar - o’zgaruvchan/tashqi menejerlar orqali.

10) Kuzatuvchanlik, ishonchlilik va qiymat

Metrikasi: navbat, bosqichlar davomiyligi, qayta ishga tushirish foizi, agentlarning o’tkazish qobiliyati.
Muvaffaqiyatsizliklar:’retry’,’timeout’,’stable’- flaky-testlarning markalanishi, ChatOps xabarnomalari.
FinOps: bo’sh turgan agentlarni avto o’chirish, parallel yig’ish limitlari, jildlar/buyruqlar bo’yicha kvotalar.

11) Turli vazifalar ostidagi payplaynlar

Backend/Web servisi

Lint/unitlar → SAST/SCA → Build → SBOM/Sign → Publish → (CD triggeri).

Data/ETL

Sxemalarni tekshirish (dbt test) → artefaktlarni yaratish → SQLning statik tahlili → modellar va hujjatlarni chop etish.

ML/LLM

Ma’lumotlar/litsenziyalarni tekshirish → spot-agentlarda mashq qilish → eksport ONNX/TensorRT → perf-testlar (latency/tokens/s) → imzo va modelni nashr etish.

12) Runabuki (tipik hodisalar)

Navbat ortib bormoqda: agentlarni qo’shing, «osilgan» payplaynlarni, concurrency limitlarini tekshiring.
Yig’ilishlar suzadi: agent konteyneridagi instrumentlar versiyalarini tepish; shared workspace oʻchirish.
Logidagi «oqish» siri: build-loglarni olib tashlash, kredenshlni almashtirish, audit o’tkazish; Kamuflyaj qoʻshish.
Boshqaruvchining yiqilishi: JCasC + job/plagin saqlovchisidan tiklash versiya qilingan.

13) Joriy etish chek-varaqasi

1. eng kam plagin toʻplamiga ega Jenkins LTS; qolganlari - agentlar.
2. Efemer K8s-agentlar, resurslar limitlari, layer-keshlar.
3. Declarative/Multibranch, PR-validatsiya,’post {always {cleanWs ()}}’.
4. Shared Libraries version bilan; sifat/xavfsizlikning yagona qadamlari.
5. Credentials Binding + tashqi sirlar; eng kam tovonlar.
6. SCA/SAST/Secret-scan/DAST, SBOM va tasvir imzosi.
7. JCasC va GitOps - konfiguratsiyani boshqarish; O’zgarishlarning PR-taftishi.
8. Metriklar/alertlar/ChatOps; retrai/taymautlar; artefaktlar va jurnallar.
9. Saqlash/retensiya siyosati, ish joylarining avto-gigiyenasi.
10. Hujjatlashtirilgan runabuklar va muntazam game-day.

14) Antipatternlar

«Hamma narsa serveriga o’xshaydi»: og’ir yig’ilishlar va plaginlar.
Scripted-joblar versiyasiz va kod-review.
Sirlar va loglarni aralashtirish; keng huquqli kredenshli.
Agentlar kam/ular doimiy → atrof-muhitning drifti, flaky-testlar.
SBOM/CVE bo’yicha artefaktlar va geytlarning imzosi yo’qligi.
«Qoʻlda» boshqaruv, JCasC/GitOps mavjud emas.

Yakunlar

Jenkins CI ning kuchli va moslashuvchan yadrosi bo’lib qolmoqda. Konfiguratsiyani kodga (JCasC) o’tkazish, Shared Libraries’dagi qadamlarni standartlashtirish, K8s efemer agentlarida yig’ilishni boshlash va xavfsizlik/imzo/SBOMni to’g’ridan-to’g’ri konveyerga o’rnatish orqali siz oldindan aytib bo’ladigan relizlar, nazorat qilinadigan qiymat va iGaming eng yuqori yuklamalariga chidamlilik olasiz

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.