在声明性管道的并行阶段重用代理

Re-use agent in parallel stages of declarative pipeline

我正在使用 Declarative Pipelines 1.3.2 插件,我想在多个并行阶段使用相同的代理(就像只指定一次 agent 指令一样):

stage('Parallel Deployment')
{
    agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
    parallel
    {
        stage('A') { steps { ... } } 
        stage('B') { steps { ... } }
    }
}

然而,詹金斯抱怨:

"agent" is not allowed in stage "Parallel Deployment" as it contains parallel stages

一个解决方案是为每个并行阶段复制 agent 指令,但这很乏味并且会导致大量重复代码和许多并行阶段:

stage('Parallel Deployment')
{
    parallel
    {
        stage('A') { 
            agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
            steps { ... } 
        } 
        stage('B') { 
            agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
            steps { ... } 
        }
    }
}

是否有更惯用的解决方案,或者每个并行阶段都需要复制 agent 指令?

在管道级别声明代理,以便所有阶段 运行 在同一代理上。

pipeline 级别指定代理可能是一个解决方案,但有一个潜在的缺点,即代理在整个构建期间处于启动状态和 运行ning。
另请注意,这意味着每个阶段(未定义自己的 agent)在同一代理实例上都是 运行,而不是代理类型。如果并行进程是 CPU/资源密集型,这可能不是您想要的。

不过,如果您想在一个实例上 运行 并行阶段,并且不能或不想在 pipeline 级别定义代理,这里是声明性语法的解决方法:

stage('Parallel Deployment') {
    agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
    stages {
        stage('A & B') {
            parallel {
                stage('A') { steps { ... } } 
                stage('B') { steps { ... } }
            }
        }
    }
}

或者您选择没有此限制的脚本化管道。