Αγωγοί Jenkins και CI
(Τμήμα: Τεχνολογία και Υποδομές)
Σύντομη Περίληψη
Το Jenkins παραμένει ο παγκόσμιος «κινητήρας» του CI σε υβριδικές υποδομές iGaming: ενσωματώνει συναρμολόγηση εφαρμογών, εμπορευματοκιβώτια, δοκιμές, επικύρωση ασφαλείας και εκδόσεις τεχνουργημάτων. Η επιτυχία είναι ένας αγωγός ως κώδικας (Δηλωτικός/Πολύπλευρος), Κοινόχρηστες Βιβλιοθήκες, εφήμεροι παράγοντες στο Kubernetes, σκληρή ασφάλεια και μυστικά, διαχείριση GitOps του config, και επιδόσεις και μετρήσεις κόστους.
1) Αρχιτεκτονική Jenkins για iGaming
Χειριστήριο (LTS) + παράγοντες: ελάχιστα πρόσθετα στο χειριστήριο. η εργασία μεταφέρεται στους πράκτορες.
Εφήμεροι παράγοντες: λειτουργία σε K8s/under δυναμική «jnlp» (ταχεία εκκίνηση, καθαρά περιβάλλοντα).
Απομόνωση εργασίας: φάκελοι/δικαιώματα (φάκελοι + στρατηγική βάσει ρόλων), πιστωτικά μόρια για τα μικρότερα δικαιώματα.
Παρατηρησιμότητα: εξαγωγή μετρικών (καθυστέρηση, ουρά αναμονής), συγκεντρωτικών αρχείων καταγραφής σταδίων, ιχνοστοιχείων ταυτότητας σε αγωγούς.
2) Μοτίβα σωληνώσεων: Δηλωτικό και Πολύπλευρο
Όταν δηλώνεται: τυποποιημένοι αγωγοί με ομοιόμορφα στάδια, σαφή στάδια «μετά».
Όταν γράφεται: Σπάνιες διακλαδώσεις «Custom».
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 και περιβάλλοντα εμπορευματοκιβωτίων
Παράδειγμα προτύπου pod (Δηλωτικό)
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
'''
}
}
}
}
}
Πρακτική: κρύπτη στρώματος μέσω κοινού «reservedDir »/απομακρυσμένης μνήμης. CPU/RAM· Όρια 'nodeSelector/tains' για το διαχωρισμό βαρέων συγκροτημάτων.
4) Κοινές βιβλιοθήκες: ΣΤΕΓΝΑ και ενιαία πρότυπα
Παρουσιάστε κοινά βήματα (linters, SAST, assembly, publishing) στην Κοινή Βιβλιοθήκη.
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'
}
}
}
}
}
Συμβουλές: έκδοση της βιβλιοθήκης ('tags'), κάλυψη με δοκιμές μονάδας των βημάτων, διατήρηση CHANGELOG.
5) Μυστικά και διαπιστευτήρια
Δεσμευτικά διαπιστευτήρια: 'usernamePassword', 'string', 'file', 'sshUserPrivalKey'.
Μυστικά πεδία: ελάχιστα δικαιώματα· να χρησιμοποιείται μόνο στα σωστά στάδια.
Μυστικοί διαχειριστές: πάροχοι εξωτερικών αποθετηρίων (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, cache εξάρτησης ('~/.m2', '~/.cache/pip') on volume; τεχνουργήματα μεταξύ σταδίων - μέσω αποθήκευσης «stash/unstash» ή τεχνουργημάτων.
7) Έλεγχοι ασφαλείας και συμμόρφωση
SCA/SAST/Μυστική σάρωση σε CI, DAST σε ξεχωριστό περιβάλλον.
SBOM (Syft/CycloneDX), υπογραφή τεχνουργήματος (cosign), μη υπογεγραμμένη πολιτική ανάπτυξης.
Πύλες πολιτικής: διακοπή του αγωγού για κρίσιμα ΚΒΕ· εκθέσεις στις δημόσιες σχέσεις.
Περίγραμμα PII: μην καταγράφετε μυστικά, μεταβλητές μάσκας, ξεχωριστούς παράγοντες για ευαίσθητα συγκροτήματα.
8) Δημοσίευση αντικειμένων και ενσωμάτωση CD
Μητρώο: Docker/OCI με πολιτική διατήρησης, ετικέτες ασυλίας.
Πακέτο Repos: Maven/NPM/PyPI proxy + cache.
Ενεργοποίηση CD: αποστολή γεγονότων στο Argo CD/Flagger ή δημιουργία δημοσίων σχέσεων στο δηλωτικό αποθετήριο GitOps.
9) Jenkins Configuration as Code (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}"
Πρακτική: config - in Git, PR review, dev→stage→prod promotion· μυστικά - μέσω μεταβλητών/εξωτερικών διαχειριστών.
10) Παρατηρησιμότητα, αξιοπιστία και κόστος
Μετρήσεις: σειρά αναμονής, διάρκεια των σταδίων, ποσοστό επανεκκίνησης, διακίνηση παραγόντων.
Αστοχίες: «επαναπροσδιορισμός», «timeout», «σταθερή» σήμανση ψιλοκομμένων δοκιμών, κοινοποιήσεις σε ChatOps.
FinOps: αυτόματη διακοπή λειτουργίας παραγόντων αδράνειας, παράλληλα όρια συναρμολόγησης, ποσοστώσεις φακέλου/εντολών.
11) Αγωγοί για διάφορα καθήκοντα
Υποστήριξη/Υπηρεσία ιστού
Lint/Units → SAST/SCA → Build → SBOM/Sign → Publish → (σκανδάλη CD).
Στοιχεία/ETL
dbt test → δημιουργούν τεχνουργήματα → στατική ανάλυση SQL → δημοσιεύουν μοντέλα και τεκμηρίωση.
ML/LLM
Επαλήθευση δεδομένων/άδεια → κατάρτιση σε πράκτορες spot → εξαγωγή ONNX/TensorRT → perf tests (καθυστέρηση/μάρκες/s) → υπογραφή και δημοσίευση μοντέλου.
12) Runabooks (τυπικά περιστατικά)
Η σειρά αναμονής αυξάνεται: πρόσθετοι παράγοντες, έλεγχος «αιωρούμενων» αγωγών, όρια νομίσματος.
Συναρμολογήσεις επιπλέουν: kick εκδόσεις εργαλείων στη δεξαμενή παράγοντα. απενεργοποίηση του κοινού χώρου εργασίας.
Το απόρρητο «διαρροή» στα αρχεία καταγραφής: διαγραφή αρχείων καταγραφής κτιρίων, αντικατάσταση της πίστωσης, διενέργεια ελέγχου. προσθήκη μάσκας.
Πτώση ελεγκτή: η ανάκτηση από την εφεδρική αποθήκευση JCasC + εργασία/πρόσθετο έχει εκδοθεί.
13) Κατάλογος ελέγχου εφαρμογής
1. Jenkins LTS με ένα ελάχιστο σύνολο πρόσθετων. όλα τα άλλα είναι σε πράκτορες.
2. Εφήμεροι παράγοντες K8s, όρια πόρων, κρυψώνες στρώματος.
3. Δηλωτικό/Πολυβραδικό, επικύρωση PR, 'post {πάντα {cleanWs ()}}'.
4. Κοινόχρηστες βιβλιοθήκες με έκδοση. ενιαία στάδια ποιότητας/ασφάλειας.
5. Δεσμευτικά διαπιστευτήρια + εξωτερικά μυστικά· ελάχιστα πεδία εφαρμογής.
6. SCA/SAST/Secret-scan/DAST, SBOM και υπογραφή εικόνας.
7. Διαχείριση ρυθμίσεων JCasC και GitOps Επανεξέταση των αλλαγών των δημοσίων σχέσεων.
8. Μετρήσεις/καταχωρίσεις/ChatOps υποχωρήσεις/χρονοδιαγράμματα· τεχνουργήματα και περιοδικά.
9. Πολιτικές αποθήκευσης/διατήρησης, αυτόματη υγιεινή των χώρων εργασίας.
10. Καταγεγραμμένα runabooks και κανονικές ημέρες παιχνιδιού.
14) Αντιπατερίδια
Ο ελεγκτής «σαν διακομιστής των πάντων»: βαριά συγκροτήματα και πρόσθετα πάνω του.
Γραφικές εργασίες χωρίς έκδοση και αναθεώρηση κώδικα.
Ανάμειξη μυστικών και κορμοτεμαχίων. δάνεια με μεγάλα δικαιώματα.
Οι παράγοντες είναι λίγοι/είναι σταθερά → παρασυρόμενα περιβάλλοντα, τολμηρές δοκιμές.
Απουσία SBOM/υπογραφή τεχνουργημάτων και πυλών από CVE.
«Χειροκίνητος» έλεγχος ρύθμισης, χωρίς JCasC/GitOps.
Περίληψη
Ο Τζένκινς παραμένει ένας ισχυρός και ευέλικτος πυρήνας CI. Μεταφράζοντας τη διαμόρφωση σε κώδικα (JCasC), τυποποιώντας βήματα στις Κοινές Βιβλιοθήκες, το τρέξιμο βασίζεται σε εφήμερους παράγοντες K8s, και ενσωματώνοντας την ασφάλεια/υπογραφή/SBOM απευθείας στον αγωγό, μπορείτε να πάρετε προβλέψιμες κυκλοφορίες, ελεγχόμενο κόστος, και iGaming μέγιστη ανθεκτικότητα φορτίου.