agent 决定在哪跑流水线
Jenkins 的 agent 声明流水线或阶段在哪个节点执行:可固定到带某标签的节点,也可用 docker 或 kubernetes 动态拉起临时容器。执行位置决定可用工具链、凭据范围与网络可达性。顶层写了 agent none 时流水线不预分配节点,每个 stage 必须自带 agent 声明,工作区随节点走、不同节点之间目录不共享。
基本信息
| 顶层 agent | 作用于整条流水线,统一分配节点 |
|---|---|
| 阶段级 agent | 按阶段切换环境与标签,覆盖顶层声明 |
| none | 无默认节点,逐段声明 agent |
| 常用写法 | any / label 'xxx' / docker / kubernetes |
| 工作区 | 不同节点的工作目录彼此独立,不自动共享 |
典型使用场景
- 构建与部署分离:构建在通用节点,部署落到只保留发布凭据的专用节点
- 工具链匹配:某阶段需要特定系统或版本(如 Windows、macOS 构建)
- 临时容器:docker/kubernetes agent 每次拉起干净环境,避免残留污染
- 资源隔离:大内存构建任务分配到高配节点,避免挤占其他流水线
- 容量调度:节点分组打标签,按用途让任务落到对应队列
分段调度示例
分段调度示例
pipeline {
agent none # 顶层不分配,逐段声明
stages {
stage('build') {
agent { label 'linux' } # 构建落在 linux 标签节点
steps { sh 'make build' }
}
stage('deploy') {
agent { label 'deploy' } # 部署落在只带发布凭据的节点
steps { sh './deploy.sh' }
}
}
}agent 写法对照
| 写法 | 含义 | 注意 |
|---|---|---|
| any | 任意有执行器的节点 | 部署类任务别用,凭据会落到随机节点 |
| label 'x' | 匹配标签的节点 | 标签拼错会排队挂起而不是报错 |
| docker | 在容器内执行阶段 | 镜像要预先构建好,工具链自备 |
| kubernetes | 在 K8s Pod 内执行 | 需要配置 Pod 模板与命名空间 |
| none | 逐段声明节点 | 漏写 agent 的阶段直接报错 |
工作区不跨节点共享:跨节点传递产物用 stash/unstash 或 archiveArtifacts 显式归档,别指望文件自己跟过去。
标签在节点的管理配置里维护:改标签前先查引用它的流水线,避免任务因无匹配节点而长期挂起。