Jenkins ve CI boru hatları
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
Jenkins, hibrit iGaming altyapılarında CI'nın evrensel "motoru" olmaya devam ediyor: uygulama montajı, konteynerleştirme, test etme, güvenlik doğrulaması ve eser yayınlamayı entegre ediyor. Başarı, kod olarak bir boru hattıdır (Bildirimsel/Multibranch), Paylaşılan Kütüphaneler, Kubernetes'teki geçici ajanlar, sert güvenlik ve sırlar, yapılandırmanın GitOps yönetimi ve performans ve maliyet metrikleri.
1) iGaming için Jenkins mimarisi
Denetleyici (LTS) + aracılar: denetleyici üzerindeki minimum eklentiler; İş ajanlara devredilir.
Geçici ajanlar: K8s/under dinamik 'jnlp'de (hızlı başlangıç, temiz ortamlar) çalışır.
İş izolasyonu: klasörler/haklar (Klasörler + Rol Tabanlı Strateji), en küçük haklar için krediler.
Gözlemlenebilirlik: metriklerin dışa aktarılması (gecikme, kuyruk), merkezi aşama günlükleri, boru hatlarında izleme kimliği.
2) Boru desenleri: Bildirimsel ve Multibranch
When Declarative: Tek tip aşamalara sahip standart boru hatları, 'post' adımlarını temizleyin.
Yazıldığında: Nadir "Özel" Dallar.
Multibranch: Her şube/PR için otomatik boru hattı; Sadece aktif şube politikaları.
Temel Bildirimsel-boru hattı
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 ajanları ve konteyner ortamları
Örnek podTemplate (Bildirimsel)
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
'''
}
}
}
}
}
Uygulama: ortak 'boş' Dir'/uzak önbellek aracılığıyla katman önbelleği; CPU/RAM; Ağır montajları ayırmak için 'nodeSelector/tains' sınırları.
4) Paylaşılan Kütüphaneler: DRY ve Tekdüzen Standartlar
Paylaşılan Kitaplıkta ortak adımları (linters, SAST, assembly, publishing) ortaya çıkarın.
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()
}
Kullanım:
groovy
@Library('ci-lib@v3') _
pipeline {
agent any stages {
stage('Pipeline') {
steps {
withQuality {
sh 'make build'
}
}
}
}
}
İpuçları: sürüm kütüphane ('etiketler'), adım birim testleri ile kapak, CHANGELOG tutmak.
5) Sırlar ve kimlik bilgileri
Kimlik Bilgileri Bağlama: 'usernamePassword', 'string', 'file', 'sshUserPrivateKey'.
Gizli kapsamlar: asgari haklar; Sadece doğru aşamalarda kullanın.
Gizli yöneticiler: Harici depolar için sağlayıcılar (KMS/Secrets Manager/HashiCorp Vault).
groovy withCredentials([string(credentialsId: 'cosign-key', variable: 'COSIGN_KEY')]) {
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
}
6) Eşzamanlılık, matrisler, önbellek
Matris-derlemeleri
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' } }
}
}
Önbellekleme: Docker katman önbelleği, bağımlılık önbelleği ('~/.m2', '~/.cache/pip') birimde; aşamalar arasındaki eserler - 'zula/unstash' veya eser depolama yoluyla.
7) Güvenlik kontrolleri ve uygunluk
CI SCA/SAST/Gizli tarama, ayrı bir ortamda DAST.
SBOM (Syft/CycloneDX), eser imzası (cosign), imzasız-hayır dağıtım politikası.
Politika kapıları: Kritik CVE'ler için boru hattının durdurulması; Halkla ilişkiler raporları.
PII konturları: sırları, maske değişkenlerini, hassas montajlar için ayrı ajanları kaydetmeyin.
8) Yayın eserleri ve CD entegrasyonu
Kayıt: Saklama politikası, dokunulmazlık etiketleri ile Docker/OCI.
Paket Repoları: Maven/NPM/PyPI proxy + önbellek.
CD tetikleyicileri: olayları Argo CD/Flagger'a göndermek veya GitOps manifesto deposunda PR oluşturmak.
9) GitOps и Kod Olarak Jenkins Yapılandırması (JCasC)
Denetleyici yapılandırmasını kod olarak tutun: şablon işleri, krediler (bağlantılar), RBAC, aracılar.
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}"
Uygulama: config - Git, PR incelemesi, dev> sahne> prod tanıtımı; sırlar - değişkenler/dış yöneticiler aracılığıyla.
10) Gözlemlenebilirlik, güvenilirlik ve maliyet
Metrikler: kuyruk, aşamaların süresi, yeniden başlatmaların yüzdesi, aracıların çıktısı.
Arızalar: 'Yeniden deneme', 'zaman aşımı', lapa lapa testlerin 'kararlı' işareti, ChatOps'ta bildirimler.
FinOps: Boşta duran ajanların otomatik olarak kapatılması, eşzamanlı montaj limitleri, klasör/komut kotaları.
11) Farklı görevler için boru hatları
Arka uç/Web hizmeti
Lint/Units - SAST/SCA - Build - SBOM/Sign - Publish - (CD tetiği).
Veri/ETL
Dbt testi - artefaktlar oluşturur - statik SQL analizi - modelleri ve belgeleri yayınlayın.
ML/LLM
Veri/lisans doğrulaması - spot aracılarda eğitim - ONNX/TensorRT dışa aktarma - perf testleri (gecikme/belirteçler/ler) - model imzalama ve yayınlama.
12) Runabooks (tipik olaylar)
Kuyruk büyüyor: aracılar ekleyin, "askıya alınmış" boru hatlarını kontrol edin, eşzamanlılık sınırları.
Montajlar yüzer: ajan konteynerindeki aletlerin tekme versiyonları; Paylaşılan çalışma alanını devre dışı bırak.
Günlüklere "sızan" sır: yapı günlüklerini silin, krediyi değiştirin, bir denetim yapın; maskeleme ekleyin.
Denetleyici bırakma: yedekleme JCasC + iş/eklenti depolama kurtarma sürümü.
13) Uygulama kontrol listesi
1. Minimum eklenti kümesiyle Jenkins LTS; Diğer her şey ajanların içinde.
2. Geçici K8s ajanları, kaynak sınırları, katman önbellekleri.
3. Bildirimsel/Multibranch, PR doğrulama, 'post {always {cleanWs ()}}'.
4. Sürüm oluşturma ile Paylaşılan Kütüphaneler; Tekdüze kalite/güvenlik adımları.
5. Kimlik Bilgileri Bağlama + dış sırlar; minimal kapsamlar.
6. SCA/SAST/Gizli tarama/DAST, SBOM ve görüntü imzası.
7. JCasC ve GitOps yapılandırma yönetimi; Değişikliklerin PR incelemesi.
8. Metrikler/uyarılar/ChatOps; Geri çekilmeler/zaman aşımları; Eserler ve günlükler.
9. Depolama/saklama politikaları, çalışma alanlarının otomatik hijyeni.
10. Belgelenmiş runabooks ve düzenli oyun günleri.
14) Antipatterns
Denetleyici'her şeyin bir sunucusu gibi ": üzerinde ağır montajlar ve eklentiler.
Sürüm ve kod incelemesi olmayan komut dosyası işleri.
Sırları ve günlükleri karıştırma; Geniş haklara sahip krediler.
Ajanlar azdır/bunlar sabittir - sürüklenme ortamları, lapa lapa testler.
SBOM'un yokluğu/CVE tarafından eser ve kapıların imzası.
"Manuel" yapılandırma kontrolü, JCasC/GitOps yok.
Özet
Jenkins güçlü ve esnek bir CI çekirdeği olmaya devam ediyor. Yapılandırmayı koda (JCasC) çevirerek, Paylaşılan Kitaplıklar'daki adımları standartlaştırarak, geçici K8s aracıları üzerinde yapılar çalıştırarak ve güvenlik/imza/SBOM'u doğrudan boru hattına gömerek, öngörülebilir sürümler, kontrollü maliyet ve iGaming'in en yüksek yük esnekliğini elde edersiniz.