如何在jenkinsci/kubernetes-plugin中使用yaml定义pod

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

我正在使用这个插件在 Kubernetes 集群、jenkinsci/kubernetes-plugin 中运行动态代理,到目前为止一切都很顺利,除了当我尝试使用可用于以 yaml 格式定义从属 Pod 的功能时。

不幸的是,当我尝试使用此功能时,事情变得很糟糕。我改变了我的詹金斯管道脚本:

def label = "kubernetes"
podTemplate(label: label,
  containers: [containerTemplate(name: 'jnlp', image: 'artifactory.baorg.com:5001/sum/coreimage:1', ttyEnabled: true, label: label)],
  imagePullSecrets: [ 'ad-artifactory-cred' ],
  ) {
  node(label) {
    stage('Core') {
      container(name: 'jnlp') {
          stage('building program') {
            sh "echo hello world"
        }
      }
    }
  }
}

对此:

def label = "kubernetes"
podTemplate(label: label, yaml: """
apiVersion: v1
kind: Pod
metadata:
  labels:
    label: label
  spec:
    containers:
    - name: jenkins-slave
      image: artifactory.baorg.com:5001/sum/coreimage:1
      tty: true
"""
) {
  node(label) {
    stage('Core') {
      container(name: 'jnlp') {
          stage('building program') {
            sh "echo hello world"
        }
      }
    }
  }
}

当以前面的方式编写管道脚本时,一切都按预期工作。从属容器已创建并且作业运行。不幸的是,当我采用这些设置并尝试将它们编码为 YAML 格式时,似乎配置甚至没有被读取或其他内容。当它工作时,如果集群中尚不存在图像,则将拉取图像并且作业运行良好:

但是当我更改配置以便在 YAML 中完成时,该作业尝试拉取名为“jenkins/jnlp-slave:alpine”的映像而不是我指定的映像,并且超时,因为我的集群无权访问互联网(index.docker...)。它拉取此图像的原因是由于插件中的错误,当从属名称未设置为“jnlp”时会发生该错误(无论如何,这与我的问题无关)。

要进行的重要观察是,由于某种原因,YAML 信息没有被接受或认可,我不确定为什么。是因为某些格式错误吗?或者这是这个插件的一些已知问题(我发现很难相信)。我已经检查过代码中是否有任何额外的选项卡,但我没有。

kubernetes jenkins jenkins-pipeline jenkins-plugins jenkins-agent
1个回答
1
投票

基于快速浏览您的管道 DSL 和 YAML 规范。以下代码片段是 DSL 的直接翻译的样子(未经测试)。

apiVersion: v1
kind: Pod
metadata:
  labels:
    label: label
  spec:
    containers:
    - name: jnlp
      image: artifactory.baorg.com:5001/sum/coreimage:1
      tty: true
    imagePullSecrets:
    - name: ad-artifactory-cred

在您的原始配置中,您指定不使用默认的“jnlp”容器,而是使用您指定的容器。在您的 YAML 版本中,您使用了名称“jenkins-slave”,从而向插件表明您希望默认 jnlp 容器 (

jenkins/jnlp-slave:alpine
) 在 pod 中与您的“jenkins-slave”容器一起启动。

至于拉取失败的原因,这可能是事件中指出的网络配置问题(防火墙或代理)。如果您有权访问该节点,请尝试手动执行

docker pull jenkins/jnlp-slave:aline
进行调试。

© www.soinside.com 2019 - 2024. All rights reserved.