Jenkins және CI пайплайндары
(Бөлім: Технологиялар және Инфрақұрылым)
Қысқаша түйіндеме
Jenkins iGaming гибридті инфрақұрылымында CI әмбебап «қозғалтқышы» болып қала береді: ол қосымшаларды құрастыруды, контейнерлеуді, сынақтарды, қауіпсіздікті тексеруді және артефактілерді жариялауды біріктіреді. Табыс - бұл конвейер ретінде код (Declarative/Multibranch), Shared Libraries, Kubernetes эфемерлік агенттер, қатаң қауіпсіздік және құпиялар, GitOps-конфигурацияны басқару, сондай-ақ өнімділік пен құн өлшемдері.
1) iGaming астында Jenkins архитектурасы
Controller (LTS) + агенттер: контроллердегі плагиндер минимумы; жұмыс агенттерге ауыстырылады.
Эфемерлік агенттер: динамикалық 'jnlp' (жылдам бастау, таза орта) астында K8s/іске қосу.
Жұмысты оқшаулау: папкалар/құқықтар (Folders + Role-Based Strategy), ең аз құқықтар бойынша кредитеншіл.
Observability: метриктер экспорты (latency, кезек), орталықтандырылған саты логтары, пайплайндардағы трейс-ID.
2) Пайплайн үлгілері: Declarative және Multibranch
Declarative: біртекті сатылары бар стандартты конвейерлер, анық 'post' қадамдар.
Scripted: сирек «стандартты емес» тармақтар.
Multibranch: әр тармаққа арналған авто-пайплайн/PR; «тек белсенді тармақтар» саясаты.
Негізгі Declarative-пайплайн
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) Shared 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 cache, тәуелділік кэші ('~/.m2', '~/.cache/pip') volume; сатылар арасындағы артефактілер - 'stash/unstash' немесе артефакт-сақтау орны арқылы.
7) Қауіпсіздікті тексеру және
SCA/SAST/Secret-scan в CI, DAST в отдельной среде.
SBOM (Syft/CycloneDX), артефактілердің қолы (cosign), «қолсыз - деплой жоқ» саясаты.
Policy-гейттер: сыни CVE кезінде пайплайнды тоқтату; PR есебі.
PII контурлары: құпияларды логикалауға, айнымалыларды, сезімтал құрастырмалар үшін жеке агенттерді бүркемелеуге болмайды.
8) Артефактілерді жариялау және CD-мен интеграциялау
Registry: Ретеншн-саясаты бар Docker/OCI, тегтердің immutability.
Package Repos: Maven/NPM/PyPI proxy+cache.
CD триггерлері: оқиғаларды Argo CD/Flagger бағдарламасына жіберу немесе GitOps-манифест репозиторийіне PR жасау.
9) Jenkins Configuration as Code (JCasC) и GitOps
Контроллерді код ретінде ұстаңыз: джоб-шаблондар, креденшли (сілтемелер), 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: тоқтап тұрған агенттерді автоматты түрде өшіру, параллельді құрастыру лимиттері, қалталар/командалар бойынша квоталар.
11) Әртүрлі міндеттерге арналған пайплайндар
Backend/Web қызметі
Линт/юниттер → SAST/SCA → Build → SBOM/Sign → Publish → (триггер CD).
Data/ETL
Схемаларды тексеру (dbt test) → артефактілерді өндіру → SQL статикалық талдау → модельдер мен құжаттамаларды жариялау.
ML/LLM
Деректерді/лицензияларды тексеру → spot агенттерде жаттығу → экспорт ONNX/TensorRT → перф-тесттер (latency/tokens/s) → қол қою және модельді жариялау.
12) Рунабуки (типтік инциденттер)
Кезек өсіп келеді: агенттерді қосу, «ілініп қалған» пайплайндарды, concurrency лимиттерін тексеру.
Жинақтар жүзеді: агент контейнеріндегі құралдардың нұсқаларын тепкілеу; shared workspace бағдарламасын өшіру.
Логдағы «жылыстау» құпиясы: build-логтарды жою, креденшлды ауыстыру, аудит жүргізу; бүркемелеуді қосу.
Бақылаушының құлауы: backup JCasC + джоб/плагиндер қоймасынан қалпына келтіру нұсқаланған.
13) Енгізу чек-парағы
1. Ең аз плагин жиынтығымен Jenkins LTS; қалғандарының бәрі - агенттерге.
2. Эфемерлік 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 - конфигурацияны басқару; PR өзгерістерді тексеру.
8. Метриктер/алерттар/ChatOps; ретраилер/таймауттар; артефактілер мен журналдар.
9. Сақтау/ретенция саясаты, жұмыс кеңістігінің авто-гигиенасы.
10. Құжатталған рунабуктар және тұрақты game-day.
14) Антипаттерндер
«Барлығы сервер ретінде» контроллері: ондағы ауыр құрастырмалар мен плагиндер.
Scripted-джобтар нұсқалаусыз және код жаңартусыз.
Құпиялар мен логтарды араластыру; кең құқықты кредитершілер.
Агенттер аз/олар тұрақты → қоршаған ортаның дрейфі, flaky-тесттер.
SBOM/CVE бойынша артефактілер мен гейттердің қолтаңбасының болмауы.
«Қолмен» баптау, JCasC/GitOps жоқ.
Jenkins қуатты және икемді CI ядросы болып қала береді. Конфигурацияны (JCasC) кодқа ауыстыру, Shared Libraries-дегі қадамдарды стандарттау, K8s-эфемерлік агенттердегі жинақтарды іске қосу және қауіпсіздік/қолтаңба/SBOM-ды тікелей конвейерге кірістіру арқылы сіз болжамды релиздерді, бақыланатын құнды және iGaming ең жоғары жүктемелеріне төзімділікті аласыз