جنکینز و خطوط لوله CI
(بخش: تکنولوژی و زیرساخت)
خلاصه ای کوتاه
جنکینز «موتور» جهانی CI در زیرساختهای ترکیبی iGaming باقی مانده است: ادغام مونتاژ برنامه، containerization، آزمایش، اعتبار سنجی امنیتی و انتشار مصنوعی. موفقیت یک خط لوله به عنوان کد (Declarative/Multibranch)، کتابخانه های مشترک، عوامل زودگذر در Kubernetes، امنیت سخت و اسرار، مدیریت پیکربندی GitOps و معیارهای عملکرد و هزینه است.
1) معماری جنکینز برای iGaming
کنترل کننده (LTS) + عوامل: حداقل پلاگین ها در کنترل ؛ کار به نمایندگان منتقل می شود.
عوامل زودگذر: در حال اجرا در K8s/under jnlp پویا (شروع سریع، محیط تمیز).
جداسازی کار: پوشه ها/حقوق (پوشه ها + استراتژی مبتنی بر نقش)، اعتبار برای کوچکترین حقوق.
قابلیت مشاهده: صادرات معیارها (تأخیر، صف)، سیاهههای مربوط به مرحله متمرکز، شناسه ردیابی در خطوط لوله.
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 عوامل و محیط ظرف
نمونه podTemplate (اعلانی)
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 '/کش از راه دور ؛ پردازنده/RAM ؛ 'nodeSelector/tains' محدودیت برای جدا کردن مجموعه های سنگین.
4) کتابخانه های مشترک: استانداردهای خشک و یکنواخت
مراحل مشترک (linters، 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) اسرار و اعتبار
اعتبار اتصال: 'نام کاربری', 'رشته', 'فایل', 'sshUserPrivateKey'.
حوزه های مخفی: حداقل حقوق ؛ فقط در مراحل مناسب استفاده کنید.
مدیران مخفی: ارائه دهندگان مخازن خارجی (KMS/Secrets Manager/HashiCorp 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' } }
}
}
Caching: Docker layer cache, dependency cache ('~/.m2', '~/.cache/pip') on volume; مصنوعات بین مراحل - از طریق «ذخیره/unstash» یا ذخیره سازی مصنوعی.
7) بررسی ایمنی و انطباق
SCA/SAST/اسکن مخفی در CI، DAST در یک محیط جداگانه.
SBOM (Syft/CycloneDX)، امضای مصنوعی (cosign)، سیاست unsigned-no deploy.
دروازه های سیاست: متوقف کردن خط لوله برای CVE های بحرانی ؛ گزارش در روابط عمومی
خطوط PII: اسرار را وارد نکنید، متغیرهای ماسک، عوامل جداگانه برای مجامع حساس.
8) انتشار مصنوعات و ادغام CD
رجیستری: Docker/OCI با سیاست حفظ، برچسب های ایمنی.
بسته بندی مخازن: MAVEN/NPM/پروکسی PyPI + کش.
CD triggers: ارسال رویدادها به Argo CD/Flagger یا ایجاد PR در مخزن آشکار GitOps.
9) پیکربندی جنکینز به عنوان کد (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 → مرحله → prod promotion ؛ اسرار - از طریق متغیرها/مدیران خارجی.
10) قابلیت مشاهده، قابلیت اطمینان و هزینه
معیارها: صف، مدت زمان مراحل، درصد راه اندازی مجدد، توان عملیاتی عوامل.
خرابی: 'دوباره', 'timeout', 'پایدار' مارک از آزمون پوسته پوسته شدن, اطلاعیه ها در ChatOps.
FinOps: خاموش کردن خودکار عوامل بیکار، محدودیت های مونتاژ همزمان، مقادیر پوشه/فرمان.
11) خطوط لوله برای وظایف مختلف
باطن/سرویس وب
Lint/Units → SAST/SCA → Build → SBOM/Sign → Publish → (CD trigger).
داده ها/ETL
dbt test → تولید مصنوعات → تجزیه و تحلیل SQL استاتیک → انتشار مدل ها و اسناد.
ML/LLM
تایید داده ها/مجوز → آموزش در عوامل نقطه → صادرات ONNX/TensorRT → تست های perf (تاخیر/نشانه ها/s) → امضای مدل و انتشار.
12) Runabooks (حوادث معمول)
صف در حال رشد است: اضافه کردن عوامل، چک «معلق» خطوط لوله، محدودیت همزمانی.
مجامع شناور: نسخه ضربه از ابزار در ظرف عامل ؛ فضای کاری مشترک را غیرفعال کنید.
راز «نشت» به سیاهههای مربوط: حذف سیاهههای مربوط ساخت، جایگزین اعتبار، انجام ممیزی ؛ ماسک اضافه کنید
افت کنترل: بازیابی از پشتیبان گیری JCasC + job/plugin storage versioned.
13) چک لیست پیاده سازی
1. جنکینز LTS با حداقل مجموعه ای از پلاگین ها ؛ هر چیز دیگری در ماموران است.
2. عوامل K8s زودگذر، محدودیت منابع، حافظه پنهان لایه.
3. Declarative/Multibranch, PR validation, «post {always {cleanWs ()}».
4. کتابخانههای اشتراکی با نسخهبندی مراحل کیفیت/ایمنی یکنواخت.
5. اعتبار نامه ها + اسرار خارجی ؛ حداقل محدوده.
6. SCA/SAST/Secret-scan/DAST، SBOM و امضای تصویر.
7. مدیریت پیکربندی JCasC و GitOps ؛ بررسی روابط عمومی از تغییرات
8. معیارها/هشدارها/ChatOps ؛ عقب نشینی/زمان بندی ؛ مصنوعات و مجلات.
9. سیاست های ذخیره سازی/نگهداری، خودکار بهداشت فضاهای کاری.
10. کتاب های مستند و روزهای بازی منظم.
14) ضد گلوله
کنترل کننده «مانند سرور همه چیز»: مجامع سنگین و پلاگین ها بر روی آن.
شغل اسکریپت بدون نسخه و بررسی کد.
مخلوط کردن اسرار و سیاهههای مربوط ؛ وام با حقوق گسترده
عوامل هستند چند/آنها ثابت → محیط رانش، آزمون پوسته پوسته شدن.
عدم وجود SBOM/امضای مصنوعات و دروازه ها توسط CVE.
«دستی» کنترل پیکربندی، بدون JCasC/GitOps.
خلاصه
جنکینز یک هسته قدرتمند و انعطاف پذیر CI است. با ترجمه پیکربندی به کد (JCasC)، مراحل استاندارد سازی در کتابخانه های به اشتراک گذاشته شده، در حال اجرا بر روی عوامل K8s کوتاه مدت و تعبیه امنیت/امضا/SBOM به طور مستقیم به خط لوله، شما می توانید نسخه های قابل پیش بینی، هزینه کنترل شده و انعطاف پذیری بار iGaming را دریافت کنید.