我正在使用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代理和非docker代理。有一些解决方法,它们需要为每个阶段指定一个代理,或者使用受某些控制流构造保护的docker.image()。inside()链。