我正在使用这个插件在 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 信息没有被接受或认可,我不确定为什么。是因为某些格式错误吗?或者这是这个插件的一些已知问题(我发现很难相信)。我已经检查过代码中是否有任何额外的选项卡,但我没有。
基于快速浏览您的管道 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
进行调试。