如何在Jenkinsfile的Declarative语法中声明多个agent?
没问题!Declarative Pipeline完全支持在不同阶段指定不同的agent节点,完美对应你之前Scripted Pipeline里的写法。
核心思路
Declarative Pipeline允许你在全局层面设置默认agent,也可以在单个stage层面单独声明agent,以此实现不同步骤在不同节点执行的需求。如果你的Pipeline里每个阶段都需要不同节点,推荐全局设置agent none,然后给每个stage单独指定目标节点。
对应你需求的Jenkinsfile示例
你之前的Scripted写法是这样的:
steps{ node('node1'){ sh 'echo "Executing on node1"' // 其他node1上的步骤 } node('node2'){ sh 'echo "Executing on node2"' // 其他node2上的步骤 } }
转换成Declarative语法后,对应的写法如下:
pipeline { agent none // 全局不指定默认节点,强制每个stage自己声明 stages { stage('Execute on Node1') { agent { label 'node1' } // 明确指定这个阶段在node1上运行 steps { sh 'echo "Executing on node1"' // 这里放原来node1块内的所有步骤 } } stage('Execute on Node2') { agent { label 'node2' } // 明确指定这个阶段在node2上运行 steps { sh 'echo "Executing on node2"' // 这里放原来node2块内的所有步骤 } } } }
额外细节补充
- 如果有某个阶段不需要指定特定节点,只需要随便一个可用节点,可以用
agent any替代agent { label 'xxx' }。 - 全局agent可以设为某个默认节点(比如
agent { label 'default-node' }),这样没单独声明agent的stage会自动用这个默认节点,适合大部分步骤在同一个节点、少数步骤换节点的场景。 - 每个stage的agent会创建独立的执行上下文,和Scripted里的
node()块逻辑一致,步骤的工作空间、环境都会在指定节点上初始化。
内容的提问来源于stack exchange,提问作者sirineBEJI
相关产品推荐
相关产品推荐

