首页/开发/CI/CD 与发布速查/Jenkins agent 与节点调度
工具链要点63 条

Jenkins agent 与节点调度

指定流水线或阶段运行在哪个节点:agent any / label / docker / kubernetes;agent none 时每个 stage 需要自带 agent。

CI/CD 与发布速查开发更新于 2026-10-13

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 显式归档,别指望文件自己跟过去。
标签在节点的管理配置里维护:改标签前先查引用它的流水线,避免任务因无匹配节点而长期挂起。

易错点

  • agent none 忘记逐段声明:阶段直接报错「没有指定 agent」,声明要成对出现
  • 期望工作区跨节点共享:文件不会自动带过去,产物必须显式归档传递
  • 标签拼写错误或节点离线:任务在队列里挂起而不是失败,需设置超时与队列监控
  • 部署凭据放在 any 节点上:构建任务也能拿到发布凭据,按用途拆分标签收紧范围

数据来源与参考

  • Jenkins 手册《Using agents》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌