我有一个项目,其中的测试仅在 Linux 上运行,其他测试仅在 Windows 上运行。
我有一个 Linux 代理和一个 Windows 代理。我需要先检查两个代理上的项目(及其多个依赖项),然后才能在各自的代理上运行测试。
在不重复代码的情况下执行此操作的最佳方法是什么?
我已经设法让矩阵块像这样工作:
stage('SCM Checkout Matrix')
{
matrix {
axes {
axes {
name 'AGENT'
values 'builtin', 'jenkins-uk-win7'
}
}
stages {
stage("SCM Checkout") {
options {
lock( 'synchronous-matrix' )
}
agent {label "${AGENT}"}
steps {
<many git checkouts in here>
}
}
}
}
我还尝试使用
&&
运算符定义多个代理标签:
agent(label 'builtin && jenkins-uk-win7')
如here所述,但它抱怨没有一个名为“builtin && jenkins-uk-win7”的代理。
我研究了这篇文章,人们似乎在使用
&&
方面遇到了与我类似的问题。
这当然是一件非常基本的事情吗?我是否忽略了一些明显而令人痛苦的事情?
是的,您尝试执行的声明语法很冗长。 pipeline-stage-view插件在那里没有帮助。尝试一下 pipeline-graph-view 插件,如果您仍然觉得它很麻烦,那么您唯一的其他选择就是使用脚本化管道:
def agents = ['builtin', 'jenkins-uk-win7']
def stages = agents.collectEntries { agent -> [
agent,
{
node(agent) {
stage("$agent Checkout") {
echo agent
// whatever else you want to do
}
// other stages
}
}
]}
parallel(stages)