जेनकिंस और सीआई पाइपलाइन
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
जेनकिंस हाइब्रिड आईगेमिंग इन्फ्रास्ट्रक्चर में सीआई का सार्वभौमिक "इंजन" बना हुआ है: यह एप्लिकेशन असेंबली, कंटेनराइजेशन, परीक्षण, सुरक्षा सत्यापन और कलाकृति प्रकाशन को एकीकृत करता है। सफलता कोड (डिक्लेरेटिव/मल्टीब्रांच), साझा लाइब्रेरी, कुबर्नेट्स में पंचांग एजेंट, हार्ड सिक्योरिटी और रहस्य, कॉन्फिग के गिटोप्स प्रबंधन और प्रदर्शन और लागत मैट्रिक्स के रूप में एक पाइपलाइन है।
1) iGaming के लिए जेनकिंस वास्तुकला
नियंत्रक (एलटीएस) + एजेंट: नियंत्रक पर न्यूनतम प्लगइन; काम एजेंटों को हस्तांतरित किया जाता है।
पंचांग एजेंट: K8s/under गतिशील 'jnlp' (तेज शुरुआत, स्वच्छ वातावरण) में चल रहा है।
कार्य अलगाव: फ़ोल्डर/अधिकार (फ़ोल्डर + रोल-आधारित रणनीति), सबसे छोटे अधिकारों के लिए क्रेडिट।
अवलोकन: मैट्रिक्स का निर्यात (विलंबता, कतार), केंद्रीकृत चरण लॉग, पाइपलाइनों में आईडी का पता लगाएं।
2) पाइपिंग पैटर्न: घोषणात्मक और मल्टीब्रांच
जब घोषणात्मक: समान चरणों के साथ मानक पाइपलाइनें, स्पष्ट 'पोस्ट' कदम।
जब स्क्रिप्टेड: दुर्लभ "कस्टम" शाखाएँ।
मल्टीब्रांच: प्रत्येक शाखा/पीआर के लिए ऑटो-पाइपलाइन; सक्रिय शाखा केवल नीतियों।
बेसिक डिक्लेरेटिव-पाइपलाइन
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) कुबर्नेट्स एजेंट और कंटेनर वातावरण
उदाहरण 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
'''
}
}
}
}
}
अभ्यास: आम ' Dir '/रिमोट कैश के माध्यम से परत कैश; सीपीयू/रैम; भारी विधानसभाओं को अलग करने के लिए 'nodeSelector/tains' की सीमा।
4) साझा पुस्तकालय: DRY और यूनिफ़ॉर्म मानक
साझा लाइब्रेरी में सामान्य कदम (लिंटर्स, एसएएसटी, असेंबली, प्रकाशन) लाएं।
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) रहस्य और साख
Credentials बाइंडिंग: 'usernamePassword', 'string', 'File', 'sshurePriveKey'.
गुप्त स्कोप: न्यूनतम अधिकार; केवल सही चरणों में उपयोग करें।
गुप्त प्रबंधक: बाहरी भंडार (KMS/राज प्रबंधक/HashiCorp वॉल्ट) के लिए प्रदाता।
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' } }
}
}
कैशिंग: वॉल्यूम पर डॉकर लेयर कैश, डिपेंडेंसी कैश ('~/.m2', '~/.cache/pip'); चरणों के बीच कलाकृतियाँ - 'stash/unstash' या कलाकृतियों के भंडारण के माध्यम से।
7) सुरक्षा जांच और अनुपालन
SCA/SAST/सीक्रेट-स्कैन CI, DAST में एक अलग वातावरण में।
SBOM (Syft/CycloneDX), कलाकृति हस्ताक्षर (cosign), अहस्ताक्षरित-कोई तैनाती नीति नहीं।
नीति द्वार: महत्वपूर्ण सीवीई के लिए पाइपलाइन को रोकना; पीआर में रिपोर्ट।
PII आकृति: लॉग सीक्रेट, मास्क चर, संवेदनशील विधानसभाओं के लिए अलग एजेंट नहीं।
8) प्रकाशन कलाकृतियों और सीडी एकीकरण
रजिस्ट्री: प्रतिधारण नीति, प्रतिरक्षा टैग के साथ डॉकर/ओसीआई।
पैकेज रिपोज़: मावेन/एनपीएम/PyPI प्रॉक्सी + कैश।
सीडी ट्रिगर: Argo CD/Flanger को घटनाओं को भेजना, या GitOps प्रकट भंडार में PR बनाना।
9) कोड (JCasC) के रूप में जेनकिंस कॉन्फ़िगरेशन и GitOps
नियंत्रक कॉन्फ़िग को कोड के रूप में रखें: टेम्पलेट कार्य, क्रेडिट (लिंक), आरबीएसी, एजेंट।
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}"
अभ्यास: कॉन्फिग - गिट में, पीआर समीक्षा, dev→stage→prod पदोन्नति; रहस्य - चर/बाहरी प्रबंधकों के माध्यम से।
10) अवलोकन, विश्वसनीयता और लागत
मेट्रिक्स: कतार, चरणों की अवधि, पुनरारंभ का प्रतिशत, एजेंटों का थ्रूपुट।
विफलताएं: 'रीट्री', 'टाइमआउट', 'स्थिर' परतदार परीक्षणों का अंकन, चाटोप्स में सूचनाएं।
FinOps: निष्क्रिय एजेंटों का ऑटो-बंद, समवर्ती विधानसभा सीमा, फ़ोल्डर/कमांड कोटा।
11) विभिन्न कार्यों के लिए पाइपलाइन
बैकेंड/वेब सेवा
लिंट/इकाइयाँ → SAST/SCA → बिल्ड → SBOM/साइन → पब्लिश → (सीडी ट्रिगर)।
डाटा/ईटीएल
dbt परीक्षण → कलाकृतियों उत्पन्न करें → स्थिर SQL विश्लेषण → मॉडल और प्रलेखन प्रकाशित करें।
एमएल/एलएलएम
डेटा/लाइसेंस सत्यापन - स्पॉट एजेंटों में प्रशिक्षण ONNX/TensorRT निर्यात पर्फ परीक्षण (विलंबता/टोकन/एस) मॉडल हस्ताक्षर और प्रकाशन।
12) रनबुक (विशिष्ट घटनाएं)
कतार बढ़ रही है: एजेंट जोड़ें, "निलंबित" पाइपलाइनों की जाँच करें, संगामिति सीमा।
असेंबली फ्लोट: एजेंट कंटेनर में उपकरणों के किक संस्करण; साझा कार्यक्षेत्र अक्षम करें।
लॉग को गुप्त "लीक": बिल्ड लॉग को हटाएं, क्रेडिट को बदलें, ऑडिट करें; मास्किंग जोड़ें।
नियंत्रक ड्रॉप: बैकअप JCasC + कार्य/प्लगइन भंडारण से वसूली वर्तमान है।
13) कार्यान्वयन चेकलिस्ट
1. प्लगइन के न्यूनतम सेट के साथ जेनकिंस एलटीएस; बाकी सब एजेंटों में है।
2. पंचांग - एजेंट, संसाधन सीमा, परत कैश।
3. घोषणात्मक/मल्टीब्रांच, पीआर सत्यापन, 'पोस्ट {हमेशा {cleanWs ()}}'.
4. संस्करण के साथ साझा पुस्तकालय; समान गुणवत्ता/सुरक्षा कदम।
5. क्रेडेंशियल बाइंडिंग + बाहरी रहस्य; न्यूनतम स्कोप।
6. SCA/SAST/सीक्रेट-स्कैन/DAST, SBOM और छवि हस्ताक्षर।
7. JCasC और GitOps कॉन्फिग प्रबंधन; परिवर्तनों की पीआर समीक्षा।
8. मेट्रिक्स/अलर्ट/चैटोप्स; रिट्रीट/टाइमआउट; कलाकृतियों और पत्रिकाओं।
9. भंडारण/प्रतिधारण नीतियां, कार्यस्थलों की ऑटो-स्वच्छता।
10. प्रलेखित रनबुक और नियमित खेल-दिन।
14) एंटीपैटर्न
नियंत्रक "सब कुछ के सर्वर की तरह": उस पर भारी असेंबली और प्लगइन।
संस्करण और कोड समीक्षा के बिना स्क्रिप्टेड कार्य
रहस्य और लॉग मिलाना; व्यापक अधिकारों के साथ ऋण।
एजेंट कुछ हैं/वे निरंतर हैं - बहाव वातावरण, परतदार परीक्षण।
CVE द्वारा कलाकृतियों और द्वार के SBOM/हस्ताक्षर की अनुपस्थिति।
"मैनुअल" कॉन्फ़िग नियंत्रण, कोई JCasC/GitOps नहीं।
सारांश
जेनकिंस एक शक्तिशाली और लचीला सीआई कोर बना हुआ है। कोड (JCasC) में कॉन्फ़िगरेशन का अनुवाद करके, साझा पुस्तकालयों में चरणों का मानकीकरण, पंचांग एजेंटों पर बिल्ड चलाना, और सुरक्षा/हस्ताक्षर/एसबीओएम को सीधे पाइपलाइन में एम्बेड करना, आपको पूर्वानुमान, नियंत्त्व लागत लागत लागत, लागत लागत तथा।