首页 > 解决方案 > 如何使用 Kubernetes 和 Helm 为 Jenkins Blue Ocean 设置 SSH 密钥

问题描述

我使用带有 BlueOcean 插件的稳定 Jenkins Helm 图表设置了一个 CI 系统。

在我的 SCM 系统(BitBucket 服务器)中,我创建了一个配置了 SSH 密钥的 Jenkins 构建用户。

我想做的是使用 SSH 密钥引导 Jenkins 安装,以便在配置 BlueOcean 管道时,无缝处理身份验证。事实上,我必须进入我想要构建的存储库并添加对 BlueOcean 生成的 SSH 密钥的访问权限。这显然并不理想,因为它为要配置的每个构建管道添加了额外的手动步骤。

Jenkins Helm 图表文档指定了一个Agent.volumes值,values.yaml该值可用于挂载,例如,包含 SSH 密钥的 Kubernetes 机密。但是,这是代理配置,因此可能允许来自构建代理(例如,来自 Jenkinsfile)的 SCM 身份验证。我想要做的是将密钥引导到 Jenkins master中。

我看到有一个Master.CredentialsXmlSecret允许包含 Credentials XML 文件的 Kubernetes 机密,但关于此的文档很少(或不存在)。

有没有人使用这种 SSH 配置在 Kubernetes/Helm 上设置 Jenkins?

*编辑:所以我设法credentials.xml通过登录 Jenkins 并手动设置 SSH 密钥,然后复制生成的credentials.xml文件,通过base64编码运行它,将其添加为 Kubernetes 机密,然后将其绑定到Master.CredentialsXmlSecretJenkins来生成正确的文件掌舵图的values.yaml. 完成此操作后,我的 Jenkins 实例加载了credentials.xml文件 ( /var/jenkins_home/credentials.xml)。凭证似乎没有正确加载到 Jenkins UI 中,但我认为我在正确的轨道上。

标签: gitjenkinskuberneteskubernetes-helmjenkins-blueocean

解决方案


您可能可以通过对 bitbucket 的 API 调用来设置它以设置 SSH 密钥。API 1.0 是这样的

$ curl --user <USER>:<PASSWORD> -X POST \
  https://bitbucket.org/api/1.0/users/<USER>/ssh-keys \
  --data-urlencode "key=<PUBLIC_KEY>" \
  --data-urlencode "label=<LABEL>"

记录在这里,或 API 2.0:

 $ curl -X POST -H "Content-Type: application/json" \
   -d '{"key": "ssh-ed25519 ...."}' \
   https://api.bitbucket.org/2.0/users/<USER</ssh-keys

记录在这里

不确定您正在寻找什么类型的权限,但您可能需要Jenkins Blue Ocean 管道的 repo SSH 密钥对

无论哪种情况,您都必须使用入口点脚本构建自定义 docker 映像,该脚本会获取生成的 ssh 密钥并将其发布到您想要发布的任何位置。


推荐阅读