Jenkins架构:Master/Agent分布式流水线设计
Jenkins架构:Master/Agent分布式流水线设计
Jenkins Master/Agent架构
Jenkins采用主从架构,Master节点负责任务调度和UI展示,Agent节点执行具体的构建任务。这种设计实现负载分散和环境隔离。
Jenkins Master(控制平面)
├── Web UI / API
├── Job调度器
├── 插件管理
└── 凭据管理
├── Agent-1(Linux构建)
│ └── Docker, Maven, Node.js
├── Agent-2(Windows构建)
│ └── .NET, Visual Studio
└── Agent-3(Kubernetes Pod)
└── 动态伸缩构建环境
Pipeline as Code
Jenkins Pipeline使用Groovy DSL定义流水线,支持声明式和脚本式两种语法:
声明式Pipeline
pipeline {
agent any
parameters {
string(name: 'VERSION', defaultValue: '1.0.0', description: '版本号')
choice(name: 'ENV', choices: ['dev', 'staging', 'prod'], description: '部署环境')
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Test') {
parallel {
stage('Unit Test') {
steps {
sh 'mvn test'
}
}
stage('Integration Test') {
steps {
sh 'mvn verify -Pintegration-test'
}
}
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
script {
deployToK8s(params.VERSION, params.ENV)
}
}
}
}
post {
always {
junit '**/target/surefire-reports/*.xml'
cleanWs()
}
success {
slackSend(channel: '#deployments', message: "✅ ${env.JOB_NAME} 部署成功")
}
failure {
slackSend(channel: '#deployments', message: "❌ ${env.JOB_NAME} 部署失败")
}
}
}
动态Agent(Kubernetes插件)
Kubernetes插件支持按需创建Pod作为构建Agent,构建完成后自动销毁:
pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.8-openjdk-11
command: ['sleep']
args: ['infinity']
- name: docker
image: docker:20.10
command: ['sleep']
args: ['infinity']
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.sock
'''
}
}
stages {
stage('Build & Push') {
steps {
container('maven') {
sh 'mvn clean package'
}
container('docker') {
sh 'docker build -t myapp:${BUILD_NUMBER} .'
sh 'docker push registry/myapp:${BUILD_NUMBER}'
}
}
}
}
}
高可用部署方案
Master HA部署:
├── 主Master节点
├── 备Master节点(热备)
├── 共享存储(NFS/Ceph)
├── 负载均衡器(HAProxy)
└── 数据库(MySQL/PostgreSQL)
关键配置包括使用外部数据库存储构建历史,共享文件系统存储Workspace,以及通过Jenkins Configuration as Code实现配置版本化管理。