GH GambleHub

Jenkins жана CI пайплайндар

(Бөлүк: Технология жана инфраструктура)

Кыскача резюме

Jenkins гибриддик iGaming түзүмүндө Синин универсалдуу "кыймылдаткычы" бойдон калууда: ал тиркемелерди чогултуу, контейнерлөө, тестирлөө, коопсуздук текшерүү жана экспонаттарды жарыялоону бириктирет. Ийгилик Code (Declarative/Multibranch), Shared Libraries, Kubernetes эфемер агенттери, катуу коопсуздук жана сырлар, GitOps конфигурациясын башкаруу, ошондой эле аткаруу жана нарк көрсөткүчтөрү сыяктуу конвейер болуп саналат.

1) iGaming астында Jenkins Архитектура

Controller (LTS) + агенттер: контроллер боюнча минималдуу плагиндер; агенттерге которулат.
Эфемер агенттери: динамикалык 'jnlp' (тез баштоо, таза чөйрө) астында K8s/ишке киргизүү.
Изоляция иштери: папкалар/укуктар (Folders + Role-Based Strategy), эң аз укуктар боюнча credenshly.
Observability: экспорттук метриктер (latency, кезек), борборлоштурулган Логи баскычтары, payplayns боюнча Trace ID.

2) Пайплайн үлгүлөрү: Declarative жана Multibranch

Declarative качан: стандарттык конвейерлер менен бирдей баскычтар, так 'post' -кадамдар.
Scripted качан: сейрек "стандарттуу эмес" бутактары.
Multibranch: ар бир бутагы/PR үчүн auto-paypline; саясатчылар "активдүү бутактар гана".

Негизги 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 агенттери жана контейнердик чөйрө

Мисал 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
'''
}
}
}
}
}

Практика: жалпы 'emptyDir '/remote cache аркылуу катмарларды кэш; CPU/RAM чектери; 'nodeSelector/taints' оор монтаждарды бөлүү үчүн.

4) Жалпы Libraries: DRY жана бирдиктүү стандарттар

Жалпы кадамдарды (линтерлер, SAST, чогултуу, жарыялоо) 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()
}
Колдонуу:
groovy
@Library('ci-lib@v3') _
pipeline {
agent any stages {
stage('Pipeline') {
steps {
withQuality {
sh 'make build'
}
}
}
}
}

Кеңештер: китепкананы версиялоо ('tags'), бирдиктүү кадамдар менен жабуу, CHANGELOG жүргүзүү.

5) Сырлар жана каттоо маалыматтары

Credentials Binding: `usernamePassword`, `string`, `file`, `sshUserPrivateKey`.
Secret scopes: минималдуу укуктар; туура этаптарда гана колдонушат.
Жашыруун менеджерлер: тышкы сактоо үчүн провайдерлер (KMS/Secrets Manager/HashiCorp Vault).

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

6) Параллелизм, матрицалар, кэш

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

Кэш: Docker layer кэш, көз карандылык кэш ('~/.m2', '~/.cache/pip') боюнча volume; этаптардын ортосундагы артефакттар - 'stash/unstash' же артефакт-сактоо аркылуу.

7) Коопсуздук жана шайкештик текшерүү

SCA/SAST/Secret-scan CI, DAST өзүнчө чөйрөдө.
SBOM (Syft/CycloneDX), артефакттардын кол тамгасы (cosign), "кол тамгасыз - деплой жок" саясаты.
Policy-гейтс: критикалык CVE боюнча пайплайн токтотуу; PR отчеттор.
Контурлар PII: жашыруун, өзгөрмөлүү жашыруу эмес, сезимтал чогултуу үчүн жеке агенттер.

8) Артефакттарды жарыялоо жана CD менен интеграциялоо

Registry: Retenshn саясаты менен Docker/OCI, тег immutability.
Package Repos: Maven/NPM/PyPI proxy+cache.
CD-триггерлер: Argo CD/Flagger окуяларды жөнөтүү, же GitOps-репозиторийде манифесттердин пиар түзүү.

9) Jenkins Configuration as Code (JCasC) и GitOps

Контроллерди код катары кармаңыз: Jobs шаблондору, Credenshly (шилтемелер), RBAC, агенттер.

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

Практика: - Git, PR-ревю, промоушен dev → stage → prod; сырлар - өзгөрмөлүү/тышкы менеджерлер аркылуу.

10) Байкоо, ишенимдүүлүк жана наркы

Метрика: кезек, этаптардын узактыгы, кайра баштоо пайызы, агенттердин өткөрүү жөндөмдүүлүгү.
мүчүлүштүктөр: 'retry', 'timeout', 'stable' -flaky-тесттерди белгилөө, ChatOps эскертмелери.
FinOps: auto өчүрүү бош агенттер, параллелдүү чогултуу чеги, папка/команда боюнча квота.

11) Ар кандай тапшырмалар боюнча пайплайндар

Backend/Web кызматы

Lint/бирдиктер → SAST/SCA → Build → SBOM/Sign → Publish → (CD триггер).

Data/ETL

Схемаларды текшерүү (dbt test) → артефакттарды өндүрүү → SQL статикалык талдоо → моделдерди жана документтерди жарыялоо.

ML/LLM

Маалыматтарды/лицензияларды текшерүү → spot агенттерде окутуу → экспорт ONNX/TensorRT → перф тесттер (latency/tokens/s) → кол коюу жана моделдерди жарыялоо.

12) Рунабуки (типтүү окуялар)

кезек өсүп жатат: агенттер кошуу, текшерүү "илинип" payplayns, concurrency чектери.
Swimming Ассамблеи: агент контейнерде аспаптар нускасын тепкилөө; өчүрүү shared workspace.
Жашыруун "агып" логиде: build-logs алып, credenshl алмаштыруу, аудит жүргүзүү; маскировка кошуу.
Controller Down: Backup JCasC + джоб сактоо/плагиндер нускасын калыбына келтирүү.

13) Киргизүү чек-тизмеси

1. минималдуу плагин топтому менен Jenkins LTS; калгандарынын баары - агенттерге.
2. Efemer K8s-агенттер, ресурстардын чеги, layer-кэш.
3. Declarative/Multibranch, PR-валидация, 'post {always {cleanWs ()}}'.
4. Shared Libraries чыгаруу менен; бирдиктүү сапат/коопсуздук кадамдары.
5. Credentials Binding + тышкы сырлар; минималдуу сатып алуулар.
6. SCA/SAST/Secret-scan/DAST, SBOM жана кол сүрөттөр.
7. JCasC жана GitOps-Configuration башкаруу; өзгөрүүлөрдүн PR-ревю.
8. Метрика/Алерт/ChatOps; ретраи/таймауттар; экспонаттар жана журналдар.
9. Сактоо/ретенция саясаты, жумуш орундарынын авто гигиенасы.
10. Документтештирилген Runabook жана үзгүлтүксүз game-day.

14) Антипаттерндер

Контроллер "бардык Server катары": оор чогултуу жана плагиндер ошол эле.
Scripted Jobs версиялоо жана код ревю жок.
Сырларды жана логдорду аралаштыруу; кеңири укуктарга ээ.
Агенттер аз/алар туруктуу → айлана-чөйрөнү drift, flaky-тесттер.
Жок SBOM/кол экспонаттар жана CVE боюнча Gates.
"Кол" Configuration башкаруу, эч кандай JCasC/GitOps.

Натыйжалары

Jenkins күчтүү жана ийкемдүү CI өзөгү бойдон калууда. Конфигурацияны кодго которуу (JCasC), Shared Libraries кадамдарын стандартташтыруу, эфемердик K8s агенттеринде жыйындыларды баштоо жана конвейерге түздөн-түз коопсуздук/кол тамга/SBOM киргизүү менен, сиз алдын ала боло турган релиздерди, контролдонуучу наркты жана iGaming эң жогорку жүктөмүнө туруктуулукту аласыз

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.