如何在Jenkinsfile流水线中针对特定代理名称或标签跳过阶段?
解决方法
要让「Stuff not for p」阶段避开带有p标签的节点,同时保留u16标签的要求,你可以借助Jenkins的标签逻辑表达式,在这个特定阶段里单独指定agent规则,覆盖全局的agent设置。
修改后的代码如下:
agent { node { label 'u16' } } stage('parallel stuff') { parallel { stage('Stuff not for p') { // 单独配置该阶段的agent:只选带u16但不带p的节点 agent { node { label 'u16 && !p' } } steps { echo "My node name is ${env.NODE_NAME}" echo "My node labels are ${env.NODE_LABELS}" sh './should_not_run_on_p' } } // ... 其他阶段 } }
为什么这样有效?
Jenkins的标签表达式支持逻辑运算:
&&表示“同时满足”,要求节点必须带有所有指定的标签!表示“排除”,过滤掉带有该标签的节点
u16 && !p这个表达式会精准筛选出你的m_node1和m_node2——它们都带u16标签,且没有p标签,完全符合你不让该阶段在p_node1/p_node2运行的需求。
额外选项
如果你的整个流水线都不需要在p节点上运行,也可以直接修改全局的agent标签:
agent { node { label 'u16 && !p' } }
但考虑到你还有其他并行阶段,显然在目标阶段单独设置agent是更灵活的选择。
内容的提问来源于stack exchange,提问作者flo
相关产品推荐
相关产品推荐

