jenkins - 由于标签格式错误,Jenkins master 无法在 k8s 上启动 slave
问题描述
我已经helm
在k8s
.
我还安装了(通过在values.yaml
文件中将它们作为列表传递大约 300 个插件(如果重要的话)。
当我试图启动代理时,事情开始出错了。
这失败并出现以下错误:
.default/api/v1/namespaces/jenkins/pods?labelSelector=jenkins%2Fjenkins-myenv-jenkins-slave%3Dtrue%2Cjenkins%2Flabel%3Djenkins-myenv-jenkins-slave_. Message: unable to parse requirement: invalid label value: "jenkins-myenv-jenkins-slave_": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue', or 'my_value', or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?'). Received status: Status(apiVersion=v1, code=400, details=null, kind=Status, message=unable to parse requirement: invalid label value: "jenkins-myenv-jenkins-slave_": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue', or 'my_value', or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?'), metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=BadRequest, status=Failure, additionalProperties={}).
我真的很想知道它是如何最终要求一个带有标签的 pod
jenkins-myenv-jenkins-slave_
因为我的values.yaml
文件中没有任何地方以_
.
这是我的agent
配置的第一行values.yaml
agent:
enabled: true
image: "jenkins/jnlp-slave"
tag: "3.27-1"
customJenkinsLabels: []
# name of the secret to be used for image pulling
imagePullSecretName:
componentName: "jenkins-slave"
privileged: false
更何况配置部分的相关字段最后好像没有下划线
解决方案
我建议不要在jenkins中手动定义代理,你应该只配置kubernetes主机地址
使用声明式管道,您可以像这样定义 kubernetes 代理:
agent {
kubernetes {
label "${kubernetesUUID}"
defaultContainer 'docker'
yaml readTrusted('kube.yaml')
idleMinutes idleminutes
}
}
文件 kube.yml 将在与 Jenkinsfile 相同的文件夹中进行版本控制
apiVersion: v1
kind: Pod
spec:
containers:
- name: jnlp
image: jenkinsci/jnlp-slave:latest
args:
- ${computer.jnlpmac} ${computer.name}
tty: true
- name: docker
image: myimage:version
tty: true
command:
- cat
volumeMounts:
- mountPath: /dev/random
name: host-urandom
volumes:
- name: host-urandom
hostPath:
path: /dev/urandom
您可以在规范中添加任意数量的容器,但是 jnlp 必须保留。你也应该修复版本,不要让最新版本
您还可以将带有规范的字符串直接传递给 yaml 步骤,而不是使用外部文件。
如果您想让代理在几分钟后启动并且每次构建时不生成新代理,您可以使用步骤 idleMinutes
推荐阅读
- python - 努力使用python代码按时间顺序对月度数据均值进行排序
- unix - 在 GitHub 工作流程中使用 Base64 图像编译 Latex 文件
- git - git push -u origin master 后没有结果
- google-chrome - android web 视图安全性
- javascript - jQuery:嵌套悬停和单击功能以显示和隐藏文本
- image - 为什么我的自定义 Glide 旋转变换不适用于 90 度请求?
- docker - 是否可以编写作为容器安装的 Gitea 的安装向导步骤的脚本?
- ubuntu - 如何正确安装 i386 架构?
- ios - 带有企业证书的 iOS 应用程序 - 显示附加访问权限
- .net - Microsoft.AspNetCore.Authentication.Facebook 强制重新登录