我使用稳定的Jenkins-Helm图表和BlueOcean插件建立了一个CI系统。
在我的SCM系统(BitBucket Server(中,我创建了一个Jenkins构建用户,并配置了SSH密钥。
我想做的是使用SSH密钥引导Jenkins安装,这样在配置BlueOcean管道时,身份验证就可以无缝处理。事实上,我必须进入我想要构建的存储库,并添加对BlueOcean生成的SSH密钥的访问权限。这显然并不理想,因为它为要配置的每个构建管道添加了额外的手动步骤。
Jenkins-Helm图表文档在values.yaml
中指定了一个Agent.volumes
值,该值可用于装载例如包含SSH密钥的Kubernetes机密。然而,这是代理配置,因此可能允许从构建代理(例如,从Jenkinsfile(进行SCM身份验证。我想做的是将密钥引导到Jenkinsmaster中。
我看到有一个Master.CredentialsXmlSecret
,它允许一个包含Credentials XML文件的Kubernetes秘密,但有关这方面的文档很少(或根本不存在(。
有人用这种SSH配置在Kubernetes/Hem上设置Jenkins吗?
*编辑:所以我已经成功地生成了一个正确的credentials.xml
文件,方法是登录Jenkins并手动设置SSH密钥,然后复制生成的credentials.xml
文件,通过base64
编码运行它,将它添加为Kubernetes机密,然后将它绑定到Jenkins-Helm图表的values.yaml
中的Master.CredentialsXmlSecret
。完成此操作后,我的Jenkins实例将加载credentials.xml
文件(/var/jenkins_home/credentials.xml
(。凭据似乎没有正确加载到Jenkins UI中,但我认为我走在了正确的轨道上。
您可以通过对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密钥,并将其发布到您想要发布的任何位置。