我在groovy中有以下代码:
void call(Closure closure) {
pod_template_maven_image = ...
pod_template_maven_m2 = ...
pod_template_nodejs_image = ...
pod_template_sonar_image = ...
toleration_condition = true
def yaml_config = ""
if(toleration_condition){
yaml_config = """
spec:
tolerations:
- key: "my_toleration"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
"""
}
podTemplate(containers: ...,
volumes: ...,
etc...,
yaml: yaml_config,
yamlMergeStrategy: merge()) {
node(POD_LABEL) {
closure()
}
}
}
目前,当我在 jenking 中运行作业时没有任何反应,pod 已创建且没有错误。但是 pod 中没有添加 yaml。
我们想根据 toleration_condition 值在 podTemplate 中添加容忍(yaml_config)。
我是这个领域的新手,如果可能的话现在不这样做。 它是?最好的方法是什么?
谢谢。
提示:我看到您使用 Kubernetes 插件。你看过继承那一段吗?使用声明性管道语法和
inheritFrom
可能会提供一种更简洁的方法来实现所需的结果。这里我们也将 yamlMergeStrategy
保留为默认值 (override()
)。
我已经看到,提供给
yaml_config
的“delta yaml”(yaml:
) 的缩进会影响最终结果(尾随和开始换行符也可能产生影响)。所以我建议使用 yaml_config
进行测试,例如:
yaml_config = """
spec:
tolerations:
- key: "my_toleration"
operator: "Equal"
value: "value1"
effect: "NoSchedule" """
通过放置完整的清单结构解决了问题,最终自动合并。
花了不到一年的时间才发现。