如何在Jenkins的共享管道库中设置代理{}?

时间:2019-06-14 19:46:12

标签: jenkins jenkins-pipeline

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

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

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

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

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

从上方产生第一个或第二个agent {}示例的共享管道lib的agent部分的正确语法是什么?

// /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 run”
  • 检查标签以决定下一步做什么

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

0 个答案:

没有答案