GH GambleHub

ジェンキンスとCIパイプライン

(セクション: 技術とインフラ)

概要

Jenkinsは、アプリケーションアセンブリ、コンテナ化、テスト、セキュリティ検証、アーティファクトパブリッシングを統合しています。成功はコードとしてのパイプライン(宣言/マルチブランチ)、共有ライブラリ、Kubernetesの一時的なエージェント、ハードセキュリティとシークレット、構成のGitOps管理、パフォーマンスとコストメトリクスです。

1) iGamingのJenkinsアーキテクチャ

コントローラ(LTS)+エージェント:コントローラの最小プラグイン;仕事はエージェントに転送されます。
一時的なエージェント:動的K8s/under 'jnlp'(高速起動、クリーンな環境)で実行されます。
仕事の分離:フォルダ/権利(フォルダ+ロールベースの戦略)、最小の権利のためのクレジット。
観測可能性:メトリックのエクスポート(レイテンシ、キュー)、集中ステージログ、パイプラインのトレースID。

2)配管パターン: 宣言とマルチブランチ

Declarative:標準パイプラインと均一なステージの場合、'post'ステップをクリアします。
スクリプト化された場合:まれな「カスタム」ブランチ。
マルチブランチ:各ブランチ/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エージェントおよびコンテナ環境

例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
'''
}
}
}
}
}

練習:共通の'emptyDir'/リモートキャッシュを介したレイヤーキャッシュ;CPU/RAM;重いアセンブリを分離するための'nodeSelector/tains'制限。

4)共有ライブラリ: DRYおよびUniform Standards

共有ライブラリで共通の手順(Linter、 SAST、アセンブリ、パブリッシング)を実行します。

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)秘密と資格情報

認証情報バインド:'usernamePassword'、 'string'、 'file'、 'sshUserPrivateKey'。
秘密のスコープ:最低の権利;適切な段階でのみ使用してください。
シークレットマネージャ:外部リポジトリ(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' } }
}
}

キャッシュ:Dockerレイヤーキャッシュ、依存性キャッシュ('~/。m2'、 '~/。cache/pip')ボリューム上;ステージ間のアーティファクト-'stash/unstash'またはアーティファクトストレージ。

7)安全点検および承諾

SCA/SAST/Secret-scan in CI、 DASTを別の環境で実行します。
SBOM (Syft/CycloneDX)、 artifact signature (cosign)、 unsigned-no deploy policy。
ポリシーゲート:重要なCVEのパイプラインを停止します。PRのレポート。
PII輪郭:機密情報、マスク変数、機密アセンブリの個別エージェントを記録しないでください。

8)アーティファクトの発行とCDの統合

レジストリ:Docker/OCIと保持ポリシー、免疫タグ。
パッケージリポジトリ:Maven/NPM/PyPIプロキシ+キャッシュ。
CDトリガー:Argo CD/Flaggerにイベントを送信するか、GitOpsマニフェストリポジトリでPRを作成します。

9)コードとしてのJenkinsの設定(JCasC)

コントローラの設定をコードとして保持します:テンプレートジョブ、クレジット(リンク)、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-Git、 PRレビュー、dev→stage→prod promotion;秘密-変数/外部マネージャを介して。

10)観察可能性、信頼性および費用

メトリクス:キュー、ステージの期間、再起動率、エージェントのスループット。
失敗:'retry'、 'timeout'、 'stable' marking of flaky tests、 notifications in ChatOps。
FinOps:アイドルエージェントの自動シャットダウン、同時アセンブリ制限、フォルダ/コマンドクォータ。

11)異なった仕事のためのパイプライン

バックエンド/Webサービス

Lint/Units→SAST/SCA→Build→SBOM/Sign→Publish→(CDトリガー)。

データ/ETL

dbt test→generate artifacts→static SQL analysis→publish models and documentation。

ML/LLM

データ/ライセンス検証→スポットエージェントでのトレーニング→ONNX/TensorRTエクスポート→perfテスト(レイテンシ/トークン/s)→モデル署名とパブリッシング。

12) Runabooks(典型的な事件)

キューは成長しています:エージェントの追加、「中断」パイプラインのチェック、並行限界。
アセンブリフロート:エージェントコンテナ内のツールのキックバージョン。共有ワークスペースを無効にします。
秘密はログに「漏れました」:ビルドログを削除し、クレジットを交換し、監査を行います。マスキングを追加します。
コントローラドロップ:バックアップJCasC+ジョブ/プラグインストレージからのリカバリがバージョン管理されます。

13)実装チェックリスト

1.プラグインの最小セットでJenkins LTS;他の全ては捜査官にある。
2.一時的なK8sエージェント、リソース制限、レイヤーキャッシュ。
3.宣言/マルチブランチ、PR検証、'post {always {cleanWs()}}'。
4.バージョン管理機能を備えた共有ライブラリ;均一な質/安全ステップ。
5.認証情報バインディング+外部シークレット;最小限のスコープ。
6.SCA/SAST/シークレットスキャン/DAST、 SBOM、画像署名。
7.JCasCおよびGitOps構成管理;変更のPRレビュー。
8.メトリック/アラート/ChatOps;リトリート/タイムアウト;アーティファクトとジャーナル。
9.ストレージ/保持ポリシー、ワークスペースの自動衛生。
10.文書化されたrunabooksおよび規則的なゲーム日。

14) Antipatterns

コントローラー「すべてのサーバーのように」:重いアセンブリとその上のプラグイン。
バージョン管理とコードレビューなしでスクリプト化されたジョブ。
秘密とログを混合します。広い権利の貸付け金。
エージェントは数少ない/それらは一定の→ドリフト環境、薄板なテストです。
SBOMの不在/CVEによるアーティファクトとゲートの署名。
「手動」設定制御、JCasC/GitOpsなし。

概要

Jenkinsは依然として強力で柔軟なCIコアです。構成をコード(JCasC)に変換し、共有ライブラリのステップを標準化し、一時的なK8sエージェント上でビルドを実行し、セキュリティ/署名/SBOMをパイプラインに直接埋め込むことで、予測可能なリリース、制御コスト、iGamingのピーク負荷回復力が得られます。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

Telegram
@Gamble_GC
統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。