← 返回首页
🚀

Jenkins架构:Master/Agent分布式流水线设计

📂 architecture ⏱ 2 min 248 words

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实现配置版本化管理。