jenkins - 如何在 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 run”
- 检查标签以决定下一步做什么
更新: 根据我到目前为止的发现,无法在管道顶层的 docker 和非 docker 代理之间动态选择。有一些可用的解决方法,它们需要为每个单独的阶段指定一个代理,或者它们使用受某些控制流结构保护的 docker.image().inside() 链。
解决方案
推荐阅读
- reactjs - 将 react 中的类基组件转换为钩子
- c++ - 使用带有索引缓冲区的纹理坐标
- r - R评估一个值是否存在于另一个表中
- javascript - 在包含的文件中使用表单侦听器的内容安全策略 jQuery 错误
- vue.js - 1904px 和 1903px 之间的奇怪缩放跳跃
- python - 有没有办法在 Azure 服务总线上发送带有 Python 主题和订阅的文件?
- python - .format() 的问题
- reactjs - 如何解决 ReactJS 背景图像不起作用
- kubernetes - 为什么在五个工人之后我的 Dask 工作的表现会变差?
- sql - 如何使用 SQL 拆分列中的值(无限)