Jenkins Kubernetes - 使用控制器 pod 中的自定义代理 pod 规范

问题描述 投票:0回答:1

我已使用 此 Helm Chart 在 Kubernetes 集群中部署了 Jenkins 实例。在实例内部,多个声明性管道被配置为 JCasC。这些管道需要一个带有多个容器的自定义代理 Pod。目前,yaml 规范(让我们称之为

jenkins.pod.yaml
)是在托管应用程序代码的存储库中声明的,Jenkinsfile 也在其中,我可以像这样轻松获取它们。

pipeline {
  agent {
    kubernetes {
      yamlFile 'jenkins.pod.yaml'
      retries 2
    }
  }
...
  stages {
    stage('Build war') {
      steps {
        container('builder') {
          sh 'some command in the 'builder' container'
        }
      }
    }
...

这并不理想,因为

jenkins.pod.yaml
文件包含可能因分支而异的字符串,例如容器注册表名称,并且必须在代码存储库中编辑该字符串很容易出错。

我的想法是在 jenkins 控制器 Pod 中安装

jenkins.pod.yaml
,正确模板化,并使用 Jenkinsfile 中的标签获取它们。 helm 图表中确实有一个
agent.podTemplate
值,似乎允许配置自定义代理 Pod 规范,但我无法在 Jenkinsfile 中获取它,从而导致错误或使用标准
jnlp
图像。

我尝试将图表中的

agent.podTemplates
设置为我的自定义模板

agent:
  podTemplates:
   custom-jenkins-label: |
     - name: python
       label: custom-jenkins-label
       serviceAccount: jenkins
       containers:
...

并将 Jenkinsfile 更改为

pipeline {
  agent {
    label 'custom-jenkins-label'
  }
...

来自该网站上的其他答案,但无济于事。 另一种方法是将这些

jenkins.pod.yaml
代理 pod 规格文件安装到 jenkins 控制器 pod 中的卷中,但这似乎也无法使用
controller.volumes/mount
helm 图表值。代理看不到这些文件。

有人解决这个问题了吗?

kubernetes jenkins kubernetes-helm jenkins-kubernetes jcasc
1个回答
0
投票

找到解决方案。 一切都很好,除了

podTemplate
部分有一个非常奇怪的语法,所以我提供了错误的 pod 模板。 我建议使用 hte
podTemplate.yaml
字段并在其中指定标准 kubernetes pod 模板。

  podTemplates:
    my-agent: |
      - name: my-agent
        label: my-agent
        namespace: pipeline
        yaml: |-
          apiVersion: v1
          kind: Pod
          spec:
...
© www.soinside.com 2019 - 2024. All rights reserved.