Rurociągi Jenkins i CI
(Sekcja: Technologia i infrastruktura)
Krótkie podsumowanie
Jenkins pozostaje uniwersalnym „silnikiem” CI w infrastrukturze hybrydowej iGaming: integruje montaż aplikacji, konteneryzację, testowanie, walidację bezpieczeństwa i publikację artefaktów. Sukces to rurociąg jako kod (Deklaratywny/Multibranch), Biblioteki udostępnione, efemeryczne agentów w Kubernetes, twarde bezpieczeństwo i tajemnice, GitOps zarządzania konfiguracją, i wydajność i mierniki kosztów.
1) Architektura Jenkinsa dla iGaming
Kontroler (LTS) + agenci: minimalne wtyczki na kontrolerze; praca jest przekazywana agentom.
Środki efemeryczne: działa w K8s/under dynamicznym „jnlp” (szybki start, czyste środowisko).
Izolacja pracy: foldery/prawa (Foldery + Strategia oparta na rolach), kredyty dla najmniejszych praw.
Obserwowalność: eksport metryk (opóźnienie, kolejka), scentralizowane dzienniki etapowe, identyfikator śladu w rurociągach.
2) Wzory rur: Deklaracyjne i Multibranch
Kiedy deklaracja: standardowe rurociągi o jednolitych etapach, jasne „post” kroki.
Po skryptowaniu: Rzadkie „niestandardowe” gałęzie.
Multibranch: automatyczny rurociąg dla każdej gałęzi/PR; aktywne tylko polityki oddziałów.
Podstawowy rurociąg deklaracyjny
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) Agencje kubernetes i środowiska kontenerowe
Przykład podSzablon (Deklaracyjny)
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
'''
}
}
}
}
}
Praktyka: pamięć podręczna warstwy za pomocą wspólnego „emptyDir ”/zdalnego pamięci podręcznej; PROCESOR/PAMIĘĆ RAM; „nodeSelector/tains” granice dla oddzielania ciężkich zespołów.
4) Wspólne biblioteki: DRY i jednolite standardy
Wyciągnij wspólne kroki (linterzy, SAST, montaż, wydawnictwo) w bibliotece udostępnionej.
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()
}
Zastosowanie:
groovy
@Library('ci-lib@v3') _
pipeline {
agent any stages {
stage('Pipeline') {
steps {
withQuality {
sh 'make build'
}
}
}
}
}
Wskazówki: wersja biblioteki ('tagi'), okładka z testami jednostkowymi kroków, przechowywać CHANGELOG.
5) Tajemnice i poświadczenia
Uwierzytelnienia Wiążące: 'usernileHasło', 'ciąg', 'plik', 'sshااKey'.
Tajne zakresy: minimalne prawa; używać tylko na odpowiednich etapach.
Tajni menedżerowie: dostawcy zewnętrznych repozytoriów (KMS/Secrets Manager/HashiCorp Vault).
groovy withCredentials([string(credentialsId: 'cosign-key', variable: 'COSIGN_KEY')]) {
sh 'cosign sign --key $COSIGN_KEY $IMAGE'
}
6) Równoczesność, matryce, pamięć podręczna
Zespoły matrycowe
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' } }
}
}
Buforowanie: pamięć podręczna warstwy Dockera, pamięć podręczna zależności ('~/.m2', '~/.cache/pip') na objętości; artefakty pomiędzy etapami - poprzez „schowek/schowek” lub składowanie artefaktów.
7) Kontrole bezpieczeństwa i zgodność
SCA/SAST/Secret-skanowanie w CI, DAST w oddzielnym środowisku.
SBOM (Syft/CycloneDX), podpis artefakt (cosign), niepodpisana-nie polityka wdrażania.
Bramy polityczne: zatrzymanie rurociągu dla krytycznych CZ; raporty w PR.
Kontury PII: nie rejestruj tajemnic, zmiennych masek, oddzielnych środków do wrażliwych zespołów.
8) Artefakty wydawnicze i integracja płyt CD
Rejestr: Docker/OCI z polityką zatrzymywania, immunitet.
Repos pakietu: Maven/NPM/PyPI proxy + cache.
Wyzwalacze CD: wysyłanie zdarzeń do Argo CD/Flagger lub tworzenie PR w repozytorium manifestu GitOps.
9) Jenkins Configurate as Code (JCasC) - GitOps
Zachowaj konfigurację kontrolera jako kod: zadania szablonu, kredyty (linki), RBAC, agenci.
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}"
Praktyka: config - w Git, przegląd PR, dev → etap → prod promocja; sekrety - za pośrednictwem zmiennych/menedżerów zewnętrznych.
10) Obserwowalność, niezawodność i koszt
Metryka: kolejka, czas trwania etapów, procent ponownych startów, przepustowość agentów.
Awarie: 'retry', 'timeout', 'stabilne' oznakowanie testów płatkowych, powiadomienia w ChatOps.
FinOps: automatyczne wyłączenie agentów bezczynności, równoczesne limity montażu, kwoty folderu/polecenia.
11) Rurociągi do różnych zadań
Usługa Backend/Web
Lint/Units → SAST/SCA → Build → SBOM/Sign → Publish → (CD spust).
Dane/ETL
dbt test → generować artefakty → analiza statyczna SQL → opublikować modele i dokumentację.
ML/LLM
Weryfikacja danych/licencji → szkolenie w agentach punktowych → ONNX/TensorRT eksport → testy perf (latency/tokens/s) → podpisywanie i publikowanie wzorów.
12) Runabooks (typowe incydenty)
Kolejka rośnie: dodać agentów, sprawdzić „zawieszone” rurociągi, limity jednoczesności.
Zespoły float: kopać wersje narzędzi w pojemniku agenta; wyłączyć wspólną przestrzeń roboczą.
Sekret „wyciek” do dzienników: usuń dzienniki budowy, wymienić kredyt, przeprowadzić audyt; dodać maskowanie.
Kropla kontrolera: odzyskiwanie z kopii zapasowej JCasC + magazynowanie zadania/wtyczki jest wersjonowane.
13) Lista kontrolna wdrażania
1. Jenkins LTS z minimalnym zestawem wtyczek; Wszystko inne jest w agentach.
2. Efemeryczne środki K8s, ograniczenia zasobów, bufory warstwowe.
3. Deklaracyjny/multibranch, walidacja PR, 'post {always {Ws ()}}'.
4. Udostępnione biblioteki z wersją; jednolite kroki w zakresie jakości/bezpieczeństwa.
5. Poświadczenia wiążące + tajemnice zewnętrzne; minimalne zakresy.
6. SCA/SAST/Secret-scan/DAST, SBOM i sygnatura obrazu.
7. zarządzanie konfiguracją JCasC i GitOps; Przegląd zmian w PR.
8. Mierniki/wpisy/ChatOps; rekolekcje/terminy; artefakty i czasopisma.
9. Zasady przechowywania/przechowywania, automatyczna higiena miejsc pracy.
10. Udokumentowane runabooks i regularne dni gry.
14) Antypattery
Kontroler „jak serwer wszystkiego”: ciężkie zespoły i wtyczki na nim.
Skryptowane zadania bez weryfikacji i przeglądu kodu.
Mieszanie tajemnic i kłód; kredyty o szerokich prawach.
Agentów jest niewiele/są one stałe → środowiska dryfujące, badania płatkowe.
Brak SBOM/podpis artefaktów i bram przez CVE.
„Ręczna” kontrola konfiguracji, brak JCasC/GitOps.
Podsumowanie
Jenkins pozostaje potężnym i elastycznym rdzeniem CI. Tłumacząc konfigurację na kod (JCasC), standaryzując kroki w Shared Libraries, uruchamiając bazę na efemerycznych agentach K8s i osadzając bezpieczeństwo/podpis/SBOM bezpośrednio w rurociągu, otrzymujesz przewidywalne wersje, kontrolowane koszty i iGaming maksymalną odporność obciążenia.