You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins JCASC Kubernetes插件:为podTemplate添加NodeSelector与Tolerations

解决Jenkins JCASC中PodTemplate与自定义Pod YAML合并的问题

你现有配置存在语法错误——重复了podTemplates键,这会导致部分配置不生效。另外,要正确合并Pod YAML和原有podTemplate,需在podTemplate定义中正确使用yaml字段和yamlStrategy参数,具体配置方式如下:

正确的整合配置示例(merge策略)

agent:
  enabled: true
  podTemplates:
    jenkins-slave-pod: |
      - name: jenkins-slave-pod
        label: global-slave
        serviceAccount: jenkins
        idleMinutes: "15"
        yamlStrategy: merge
        yaml: |
          apiVersion: v1
          kind: Pod
          spec:
            nodeSelector:
              karpenter.sh/provisioner-name: jenkins-provisioner
            tolerations:
            - key: "jenkins"
              operator: "Exists"
              effect: "NoSchedule"
        containers:
          - name: main
            image: 'xxxxxx.dkr.ecr.us-west-2.amazonaws.com/jenkins-slave:ecs-global'
            command: "sleep"
            args: "30d"
            privileged: true

关键说明

  • 修正语法错误:删除重复的podTemplates键,确保配置层级正确
  • yaml字段的使用:仅需把包含nodeSelector和tolerations的Pod spec部分嵌入yaml字段,无需重复定义已在podTemplate中配置的容器、服务账号等内容
  • yamlStrategy选择:
    • merge:将yaml中的配置与原有podTemplate配置合并,保留原有容器配置的同时,添加nodeSelector和tolerations
    • override:用yaml中的完整Pod定义覆盖原有podTemplate配置,此时需在yaml中包含所有必要字段(如容器、服务账号等)

若使用override策略的配置示例

agent:
  enabled: true
  podTemplates:
    jenkins-slave-pod: |
      - name: jenkins-slave-pod
        label: global-slave
        idleMinutes: "15"
        yamlStrategy: override
        yaml: |
          apiVersion: v1
          kind: Pod
          serviceAccount: jenkins-non-prod
          spec:
            nodeSelector:
              karpenter.sh/provisioner-name: jenkins-provisioner
            tolerations:
            - key: "jenkins"
              operator: "Exists"
              effect: "NoSchedule"
            containers:
              - name: main
                image: 'xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/jenkins-slave:ecs-global'
                command: "sleep"
                args: "30d"
                privileged: true

按上述配置后,JCASC即可正确将自定义Pod规格与原有podTemplate合并或覆盖,让nodeSelector和tolerations生效。

内容的提问来源于stack exchange,提问作者EilonA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:22:42