我们在 Jenkins 上的构建作业作为发布构建的一部分运行一些 git 命令,例如 git push 和 git pull,因此需要一种在构建期间从 shell 运行经过身份验证的 git 命令的方法。
我们的詹金斯奴隶不持有任何凭证,因为它们是每次构建创建的一次性 Docker 容器。
git 插件使用 Jenkins 凭据进行管理,并“以某种方式”设置 GIT_SSH 来获取通过凭据配置的私钥。
我检查了源代码并尝试确定如何配置变量,以便我可以在构建过程中将 git pull 作为 SSH 脚本运行。没有成功。
有没有办法使用 Jenkins 凭据运行 git 命令作为构建步骤的一部分?
我当前的解决方案是将 SSH 密钥复制到从属服务器作为构建环境设置的一部分,但似乎是重复的工作(加上潜在的安全问题)。
我也有一段时间想不通这个问题。因此,尽管已经快三年了,我还是会发布我的使用私有 SSH 密钥的解决方案。它还可以是适应性强的用户/密码组合。
将密钥添加到凭据部分,类型为“带私钥的 SSH 用户名”。
-
在构建项目中使用“绑定”(您需要在构建环境中勾选“使用秘密文本或文件”以使其可用)将凭证信息存储在环境变量中:
-
现在是如何在 git 调用中使用密钥的棘手部分。我选择 GIT_SSH 环境变量,因为这是最向后兼容的方式。为了使其工作,您需要创建一个包装脚本包含使用中提供的密钥文件路径的 ssh 调用SSH_KEYFILE
。人们可能会找到一种更好的解决方案来创建该脚本。对我来说,以下 shell 命令有效:
#!/bin/bash
set +x
SSH_WRAPPER_SCRIPT=/tmp/ssh_wrapper
# delete pre-existing script
[[ -f $SSH_WRAPPER_SCRIPT ]] && rm $SSH_WRAPPER_SCRIPT
# create wrapper script with current keyfile path from bindings variable
echo "#!/bin/sh" >> $SSH_WRAPPER_SCRIPT
echo "exec /usr/bin/ssh -i ${SSH_KEYFILE} \"\$@\"" >> $SSH_WRAPPER_SCRIPT
chmod +x $SSH_WRAPPER_SCRIPT
# set GIT_SSH env var to use wrapper script
export GIT_SSH=$SSH_WRAPPER_SCRIPT
# now run your actual git commands here
git ls-remote -h [email protected] /cdn-cgi/l/email-protection:some_repo.git HEAD
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)