smc*_*smc 2 groovy jenkins jenkins-groovy jenkins-pipeline
我有以下 Jenkinsfile,我想在 3 个节点上运行舞台。我根据这个答案使用了 && 运算符。
pipeline{
agent {
label 'webserver && serverex && composeserver'
}
stages{
stage('run this on 3 nodes'){
steps{
script{
sh 'echo $HOSTNAME'
}
}}
}}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了以下错误。
没有标签为“webserver&&serverex&&composeserver”的节点
上面的阶段是一个例子,我在同一个阶段下有多个脚本。
我可以使用并行实现这一点,但它会重复,因为我需要在 3 个节点上运行它。
我可以知道 AND (&&) 运算符有什么问题吗?根据链接中提到的答案,它是否从 Jenkins 中删除,因为它看起来像以前一样工作?
我认为你误解了这个答案。您只能在 中引用单个节点node([...]),这&&允许您声明 jenkins 在选择适当节点时将查找的多个标签。
例如,当您有带有标签的代理 A 和带有标签的maven windows selenium代理 B 和带有 的maven linux docker代理 C 时maven gcc linux,node('maven')将根据执行程序的可用性选择节点 A、B 或 C,当您在某些 linux-onlysh步骤中混合时,这可能是一个问题,因此您可以用于node('maven && linux')让 jenkins 选择后两个都包含这些标签的代理之一。
如果你想在多个节点上运行相同的东西,你可以循环遍历节点标签数组。
def labels = ['label1', 'label2']
for (label in labels) {
node(label) {
stage('Running on ' + label){
// Do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)