我在Jenkins中有一些带有不同标签的构建节点,其中一些是常见的:
#node name: labels
m_node1: m u16
m_node2: m u16
p_node1: p u16
p_node2: p u16
在我的Jenkinsfile管道中,我有以下代码段:
agent { node { label 'u16' } }
stage('parallel stuff') {
parallel {
stage('Stuff not for p') {
steps {
echo "My node name is ${env.NODE_NAME}"
echo "My node labels are ${env.NODE_LABELS}"
sh './should_not_run_on_p'
}
}
// ... other stages
}
}
如名称所示,我希望
Stuff not for p仅在m_node1或m_node2是当前构建节点时运行。如果阶段落在p_node1或p_node2上,则应跳过该阶段。为此,我希望能够说:"如果标签' p'不在NODE_LABELS"或者#34;如果节点名称不喜欢' p _ *'"则运行。我尝试了基于jenkins pipeline when documentation:
的语法
when { not { ${env.NODE_NAME} "p_**" } }
此操作失败并出现以下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 158: Expected a when condition @ line 158, column 34.
when { not { ${env.NODE_NAME} "p_**" } }
^
1 error
以下语法不起作用:
when { not { environment name: 'NODE_NAME', value: 'p_*' } }
我如何最好地解决我的问题?
答案 0 :(得分:0)
您可以使用已经使用的声明性管道为特定阶段定义特定代理:
pipeline{
agent none
stage('parallel stuff') {
parallel {
stage('Stuff not for p') {
agent {label 'm_node1 && m_node2'}
steps {
// steps
}
}
// ... other stages
}
}
}