Қубурҳои Ҷенкинс ва CI
(Қисм: Технология ва инфрасохтор)
Хулосаи мухтасар
Ҷенкинс "муҳаррики" универсалии CI дар инфрасохтори гибридии IGaming боқӣ мемонад: он василаи барномаҳо, контейнеризатсия, озмоиш, санҷиши амният ва нашри артефактро дар бар мегирад. Муваффақият як лӯла ҳамчун рамз (Declarative/Multibranch), Китобхонаҳои муштарак, агентҳои эфемерӣ дар Кубернетес, амнияти сахт ва асрори, идоракунии Gitops конфигуратсия, нишондиҳандаҳои иҷро ва хароҷот мебошад.
1) Меъмории Ҷенкинс барои IGaming
Контроллер (LTS) + агентҳо: плагинҳои ҳадди аққал дар контрол; кор ба агентҳо гузаронида мешавад.
Агентҳои эфемералӣ: давидан дар "jnlp" динамикӣ (оғози зуд, муҳити тоза).
Ҷудокунии кор: ҷузвдонҳо/ҳуқуқҳо (Ҷузвдонҳо + Стратегияи ба нақш асосёфта), қарзҳо барои ҳуқуқҳои хурд.
Мушоҳида: содироти ченакҳо (ниҳонӣ, навбат), гузоришҳои мутамаркази марҳилавӣ, пайгирии ID дар қубурҳо.
2) Намунаҳои қубур: Декларативӣ ва Мултибранч
Ҳангоми декларативӣ: қубурҳои стандартӣ бо марҳилаҳои ягона, қадамҳои "пост" -ро тоза кунед.
Ҳангоми скрипт: Филиалҳои нодири "Одатӣ".
Multibranch: лӯлаи худкор барои ҳар як филиал/PR; танҳо сиёсати филиали фаъол.
Лӯлаи асосии декларативӣ
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 ва муҳити контейнер
Намунаи podplate (декларативӣ)
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
'''
}
}
}
}
}
Амал: кэши қабат тавассути кэши маъмулии 'холӣ '/дурдаст; CPU/RAM; 'node' Selector/tains 'барои ҷудо кардани маҷлисҳои вазнин.
4) Китобхонаҳои муштарак: Стандартҳои DRY ва ягона
Қадамҳои маъмулро (линтерҳо, SAST, монтаж, нашр) дар Китобхонаи муштарак бароред.
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'
}
}
}
}
}
Маслиҳатҳо: версияи китобхона ('барчаспҳо'), бо санҷишҳои воҳидҳои қадамҳо, CHANGELOG нигоҳ доред.
5) Асрҳо ва эътимодномаҳо
Ҳатмии эътимоднома: 'номи истифодабаранда', 'сатр', 'файл', 'ssh- Корванди хусусӣ'.
Соҳаҳои махфӣ: ҳуқуқҳои ҳадди аққал; танҳо дар марҳилаҳои дуруст истифода мебаранд.
Менеҷерони махфӣ: провайдерҳо барои анборҳои беруна (KMS/Secrets Manager/HashI Corp Vault).
groovy withCredentials([string(credentialsId: 'cosign-key', variable: 'COSIGN_KEY')]) {
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
}
6) Мувофиқат, матритса, кэш
Матритса-монтажҳо
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, кэши вобастагӣ ('~/.m2', '~/.cache/pip') аз ҳаҷм; артефактҳо дар байни марҳилаҳо - тавассути 'stash/unstash' ё нигаҳдории артефакт.
7) Санҷишҳо ва риояи бехатарӣ
SCA/SAST/Санҷиши махфӣ дар CI, DAST дар муҳити алоҳида.
SBOM (Syft/Cyclone
Дарвозаҳои сиёсат: боздоштани лӯла барои CVE-ҳои муҳим; ҳисобот дар PR.
Контурҳои PII: сирри сабти ном накунед, тағирёбандаҳои ниқоб, агентҳои алоҳида барои маҷлисҳои ҳассос.
8) Интишори артефактҳо ва ҳамгироии CD
Феҳрист: Docker/OCI бо сиёсати нигоҳдорӣ, барчаспҳои масуният.
Репосҳои бастаҳо: Maven/NPM/PyPI прокси + кэш.
CD триггерҳо: фиристодани рӯйдодҳо ба Argo CD/Flagger ё эҷоди PR дар анбори Gits.
9) Конфигуратсияи Ҷенкинс ҳамчун Кодекс (JC-ас-C) и Git-Ops
Конфигуратсияи контроллерро ҳамчун рамз нигоҳ доред: корҳои қолабӣ, қарзҳо (пайвандҳо), 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}"
Амал: config - дар Git, баррасии PR, dev → марҳилаи → пешбурди prod; асрҳо - тавассути тағирёбандаҳо/менеҷерони беруна.
10) Риоя, эътимоднокӣ ва арзиш
Нишондиҳандаҳо: навбат, давомнокии марҳилаҳо, фоизи бозоғоз, интиқоли агентҳо.
Хатогиҳо: 'retry', 'timeout', 'мӯътадил' аломатгузории санҷишҳои номуайян, огоҳиҳо дар Chatops.
FIN Ops: худкор хомӯш кардани агентҳои бекорхобида, маҳдудиятҳои монтажи ҳамзамон, квотаҳои папка/фармон.
11) Қубурҳо барои вазифаҳои гуногун
Хизматрасонии Backend/Web
Lint/Units → SAST/SCA → Build → SBOM/Sign → Publish → (триггери CD).
Маълумот/ETL
dbt test → тавлиди артефактҳо → таҳлили статикӣ SQL → нашр кардани моделҳо ва ҳуҷҷатгузорӣ.
ML/LLM
Тафтиши маълумот/литсензия → омӯзиш дар агентҳои спот → ONNX/TensorRT содирот → санҷишҳои perf (latency/tokens/s) → имзо ва интишори модел.
12) Runabooks (ҳодисаҳои маъмулӣ)
Навбат меафзояд: агентҳо илова кунед, қубурҳои "боздошташуда" -ро санҷед, маҳдудиятҳои мувофиқат кунед.
Маҷлисҳо шино мекунанд: версияҳои асбобҳо дар контейнери агент; хомӯш кардани фазои кории муштарак.
Сирри "пинҳоншуда" ба гузоришҳо: гузоришҳои сохтанро нест кунед, қарзро иваз кунед, аудитро гузаронед; илова ниқоб.
Паст шудани контрол: барқароршавӣ аз захираи эҳтиётии JC - as. C + нигоҳдории кор/плагин санҷида мешавад.
13) Рӯйхати санҷиши амалисозӣ
1. Jenkins LTS бо маҷмӯи ҳадди аққали плагинҳо; ҳама чизи дигар дар агентҳо аст.
2. Агентҳои K8s эфемералӣ, маҳдудиятҳои захираҳо, кэшҳои қабатӣ.
3. Declarative/Multibranch, тасдиқи PR, 'post {ҳамеша {clean
4. Китобхонаҳои муштарак бо версия; қадамҳои ягонаи сифат/бехатарӣ.
5. Эътимоднома Ҳатмӣ + сирри беруна; миқёси ҳадди аққал.
6. SCA/SAST/Secret-scan/DAST, SBOM ва имзои тасвир.
7. Идоракунии конфигуратсияи JC ва Git Баррасии PR оид ба тағирот.
8. Metrics/огоҳиҳо/Chat-Ops; ақибнишинӣ/танаффус; артефактҳо ва маҷаллаҳо.
9. Сиёсати нигоҳдорӣ/нигоҳдорӣ, худкори гигиенаи ҷойҳои корӣ.
10. Runabooks ҳуҷҷатгузорӣ ва рӯзҳои муқаррарии бозӣ.
14) Антипаттернҳо
Назоратчӣ "ба монанди сервери ҳама чиз": монтажҳои вазнин ва плагинҳо дар он.
Корҳои скрипт бидуни версия ва баррасии код.
Омезиши асрҳо ва гузоришҳо; қарзҳои дорои ҳуқуқҳои васеъ.
Агентҳо каманд/онҳо муҳити доимоамалкунанда ва озмоишҳои нопок мебошанд.
Набудани SBOM/имзои артефактҳо ва дарвозаҳо аз ҷониби CVE.
Назорати конфигуратсияи "дастӣ", ҳеҷ JC JC/C/Git-Ops.
Хулоса
Ҷенкинс як ядрои CI пурқувват ва фасеҳ боқӣ мемонад. Бо тарҷумаи конфигуратсия ба рамз (JC), стандартикунонии қадамҳо дар китобхонаҳои муштарак, ба кор даровардани агентҳои эфемералӣ ва ворид кардани амният/имзо/SBOM мустақиман ба лӯла, шумо версияҳои пешгӯишаванда, арзиши назоратшаванда ва устувории қуллаи баландтаринро ба даст меоред.