首页 > 解决方案 > 如何在 Jenkins 的共享管道库中设置代理{}?

问题描述

我正在为使用 Docker 代理或通过标签指定的代理的项目编写共享管道库。我希望 agent{} 部分是可配置的。

在使用 Docker 的项目的常规 Jenkinsfile 中,代理部分如下所示:

agent
{
    docker
    {
        label 'docker'
        image 'my-image'
    }
}

不使用 Docker 的项目的代理部分如下所示:

agent
{
    node
    {
        label 'FOO'
        label 'BAR'
    }
}

共享管道库的代理部分的正确语法是什么,它将产生上面的第一个或第二个代理{}示例?

// /vars/sharedPipeline.groovy
def call(body) {
    def pipelineParams= [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = pipelineParams
    body()

    pipeline {
        agent {
            // <---- What goes here? What is the value that pipelineParams.buildAgent should have?
        }
    }
    ...
}

我想避免会迫使我:

更新: 根据我到目前为止的发现,无法在管道顶层的 docker 和非 docker 代理之间动态选择。有一些可用的解决方法,它们需要为每个单独的阶段指定一个代理,或者它们使用受某些控制流结构保护的 docker.image().inside() 链。

标签: jenkinsjenkins-pipeline

解决方案


推荐阅读