我的公司有一个小型管道库,我们为每个构建隐式加载。有没有办法透明地重载每个构建的node {
块?
我的具体情况是我使用kubernetes插件配置kubernetes slave,我想提供一个默认的YAML模板,同时允许用户选择另一个模板或覆盖特定值。例如:
node {
// Gets you a Pod with a DinD engine with a low CPU/Mem request/limit
}
可选择按名称覆盖:
node('2-core') {
// Gets you a Pod with a DinD engine with 2 CPU/ more Mem request/limit
}
或用模板覆盖:
import com.foo.utils.PodTemplates
slaveTemplates = new PodTemplates()
slaveTemplates.bigPod {
node {
// Big node
}
}
或者:
def label = "mypod-${UUID.randomUUID().toString()}"
podTemplate(label: label, yaml: """
apiVersion: v1
kind: Pod
metadata:
labels:
some-label: some-label-value
spec:
containers:
- name: redis
image: redis
"""
) {
node (label) {
// Same small pod as before PLUS a redis container
}
}
这看起来最棘手,因为您希望父级的值覆盖子级的值。
答案 0 :(得分:1)
你可以这样做,但是,在我看来,这会导致混乱的行为和可能的奇怪错误案例。
例如:
echo.groovy
def call(String string) {
steps.echo "Calling step echo: $string"
}
Jenkinsfile
echo 'hello'
输出:
Calling step echo: hello
实现这一目标的最重要方法当然是编写一个插件。