如何在jenkinsci/kubernetes插件中使用yaml定义pod

如何在jenkinsci/kubernetes插件中使用yaml定义pod,jenkins,kubernetes,jenkins-plugins,jenkins-pipeline,jenkins-slave,Jenkins,Kubernetes,Jenkins Plugins,Jenkins Pipeline,Jenkins Slave,我正在使用这个插件在Kubernetes集群中运行动态代理,jenkinsci/Kubernetes插件,到目前为止,一切都很顺利,除了我尝试使用yaml格式定义从站的可用功能 不幸的是,当我尝试使用此功能时,情况变得糟糕。我更改了Jenkins管道脚本: def label = "kubernetes" podTemplate(label: label, containers: [containerTemplate(name: 'jnlp', image: 'artifactory.bao

我正在使用这个插件在Kubernetes集群中运行动态代理,jenkinsci/Kubernetes插件,到目前为止,一切都很顺利,除了我尝试使用yaml格式定义从站的可用功能

不幸的是,当我尝试使用此功能时,情况变得糟糕。我更改了Jenkins管道脚本:

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”的映像,而不是我指定的映像,并且会超时,因为我的集群无法访问internet(index.docker…)。它拉取这个图像的原因是插件中的一个错误,当从机的名称未设置为“jnlp”时会发生这个错误(这与我的问题无关)。


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

基于对管道DSL和YAML规范的快速查看。下面的代码片段是DSL的直接翻译(未测试)的样子

在原始配置中,您指定不使用默认的“jnlp”容器,而是使用您指定的容器。在YAML版本中,您使用了名称“jenkins slave”,从而向插件表明您希望默认jnlp容器(
jenkins/jnlp slave:alpine
)与“jenkins slave”容器一起在pod中启动


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

请不要将代码/输出作为屏幕截图发布。请把它们和格式良好的代码一起发布!它是不可读的,不能复制和确认YAML文件是正确的,请考虑使用.@ doBry,我确实使用它,输出看起来有点不同于你看到的,不幸的是,我仍然得到相同的。result@StephenKing完成了,谢谢提醒
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