在多个/所有代理上执行声明式管道阶段

问题描述 投票:0回答:1

我有一个项目,其中的测试仅在 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”的代理。

我研究了这篇文章,人们似乎在使用

&&
方面遇到了与我类似的问题。

这当然是一件非常基本的事情吗?我是否忽略了一些明显而令人痛苦的事情?

jenkins jenkins-pipeline jenkins-declarative-pipeline
1个回答
0
投票

是的,您尝试执行的声明语法很冗长。 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)
© www.soinside.com 2019 - 2024. All rights reserved.