GH GambleHub

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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.