这是我所知道:
# !/usr/bin/env groovy
pipeline {
agent none
stages {
stage('Checkout SCM') {
agent { label 'win' && 'apple' && 'rhel' }
steps {
echo "Cloning Repository"
checkout([$class: 'GitSCM',
branches: [[name: "*/develop"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'WipeWorkspace']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'UNAME', url: 'URL']],
browser: [$class: 'BitbucketWeb', repoUrl: 'URL'],
])}}
stage('Building Win64, Linux764, MacOS') {
agent { label 'win&&rhel&&apple' }
steps {
script {
echo '************************'
echo '*****BUILDING JOBS******'
echo '************************'
sh 'python build.py'
sh 'cd ion-js && npm run prepublishOnly'
}}}
}
}
然而,我得到了There are no nodes with the label ‘win && rhel && apple’
错误。有人碰巧知道如何运行声明性jenkins管道,其中一个阶段在多个代理标签上并行运行吗?
我想同时将同一个git存储库 checkout 到3个不同的节点。我试过agent { label 'win' && 'apple' && 'rhel' }
和agent { label 'win&&apple&&rhel' }
,但它只是说找不到那个标签。
Here they say you can use||
和使用&&
应该可以工作,但我不确定我遗漏了什么。我可以编写3个不同的结帐阶段,但我认为有一个更好的方法
2条答案
按热度按时间cczfrluj1#
要向Micah的回答添加更多内容,您可以定义一个函数,该函数可以为您创建一个阶段,并将在您选择的不同代理节点上执行生成阶段,而不是使用不同的标签重复阶段。
由于我们在调用parallelStageMap时使用了parallel关键字,因此将在代理节点上并行执行相同的阶段。
**ProTip:**您可以在函数内定义更多步骤,这些步骤通常在所有代理上执行。如果要定义标签和阶段名称,则可以添加另一个名为
stagename
的参数,并可以解析为函数generateStage
。lnlaulya2#
我也尝试过同样的方法,但没有成功。我知道的唯一解决方案是使用
parallel
块,并为每个代理/节点/标签多次定义阶段。