跳转到内容

Jenkins代理节点配置

来自代码酷

简介[编辑 | 编辑源代码]

Jenkins代理节点(也称为AgentSlave)是一种分布式构建架构的关键组件,允许任务在多个机器上并行执行。主节点(Master)负责调度任务,而代理节点(Worker)负责实际执行构建作业。通过配置代理节点,可以:

  • 横向扩展构建能力
  • 隔离不同环境(如操作系统、工具链)
  • 优化资源利用率

代理节点类型[编辑 | 编辑源代码]

Jenkins支持多种代理节点类型,包括:

  • 永久代理:长期运行的静态节点(如物理服务器或虚拟机)
  • 临时代理:动态创建的节点(如Docker容器或云实例)
  • 云代理:通过插件(如Kubernetes、AWS EC2)自动扩缩容

配置步骤[编辑 | 编辑源代码]

1. 添加新节点[编辑 | 编辑源代码]

1. 登录Jenkins主控台,导航至 **Manage Jenkins > Manage Nodes and Clouds > New Node** 2. 输入节点名称(如`linux-agent-01`),选择 **Permanent Agent** 3. 配置以下参数:

  * 远程工作目录:代理节点的构建目录(如`/home/jenkins/agent`)  
  * 标签:标识节点的特性(如`linux,docker`)  
  * 启动方式:选择连接协议(SSH、JNLP等)  

2. 设置连接方式[编辑 | 编辑源代码]

SSH连接示例[编辑 | 编辑源代码]

```xml <slave>

 <name>linux-agent-01</name>  
 <remoteFS>/home/jenkins/agent</remoteFS>  
 <launcher class="hudson.plugins.sshslaves.SSHLauncher">  
   <host>192.168.1.100</host>  
   <port>22</port>  
   <credentialsId>ssh-key-id</credentialsId>  
 </launcher>  

</slave> ```

JNLP连接示例[编辑 | 编辑源代码]

通过Java Web Start启动代理: ```bash java -jar agent.jar -jnlpUrl http://jenkins-server:8080/computer/agent-name/slave-agent.jnlp -secret @secret-file ```

3. 验证节点状态[编辑 | 编辑源代码]

节点状态显示为 **Idle** 或 **Busy** 即表示配置成功。

实际案例[编辑 | 编辑源代码]

场景:跨平台构建[编辑 | 编辑源代码]

  • 需求:在Linux上编译C++项目,同时在Windows上运行单元测试
  • 配置:
 * 节点A(标签:`linux,gcc`):执行编译任务  
 * 节点B(标签:`windows,visualstudio`):运行测试  

流水线示例[编辑 | 编辑源代码]

```groovy pipeline {

   agent none  
   stages {  
       stage('Build') {  
           agent { label 'linux,gcc' }  
           steps {  
               sh 'make -j4'  
           }  
       }  
       stage('Test') {  
           agent { label 'windows,visualstudio' }  
           steps {  
               bat 'run_tests.exe'  
           }  
       }  
   }  

} ```

高级配置[编辑 | 编辑源代码]

资源限制[编辑 | 编辑源代码]

通过`jenkins.model.Jenkins#clouds`配置动态资源: ```xml <numExecutors>2</numExecutors> <mode>EXCLUSIVE</mode> ```

节点监控[编辑 | 编辑源代码]

使用Prometheus插件暴露指标: ```yaml - job_name: 'jenkins_nodes'

 metrics_path: '/prometheus'  
 static_configs:  
   - targets: ['jenkins-server:8080']  

```

故障排查[编辑 | 编辑源代码]

  • 连接失败:检查防火墙、SSH密钥或JNLP端口
  • 代理离线:查看日志文件(`/var/log/jenkins/agent.log`)
  • 标签不匹配:确保流水线中`agent{ label 'xxx' }`与节点标签一致

性能优化[编辑 | 编辑源代码]

  • 使用轻量级代理(如Alpine Linux Docker镜像)
  • 为高频任务分配专用节点
  • 通过`-Xrs`参数减少JVM开销

扩展阅读[编辑 | 编辑源代码]

  • Jenkins官方文档:Distributed builds
  • 书籍:《Jenkins 2: Up and Running》

graph LR A[Master] -->|SSH/JNLP| B[Agent 1] A -->|Docker| C[Agent 2] A -->|Kubernetes| D[Agent 3]

吞吐量=构建次数时间×节点数