我们在Jenkins上的构建工作是作为发布构建的一部分运行一些git命令,如git push和git pull,因此需要一种方法在构建期间从shell运行经过身份验证的git命令。
我们的jenkins奴隶不会持有任何凭据,因为它们是按照构建创建的一次性docker容器。
git插件使用Jenkins凭证和"以某种方式"来管理它。设置GIT_SSH以获取通过凭证配置的私钥。
我检查了源代码,并尝试确定如何配置变量,以便我可以运行例如git pull作为构建的一部分的SSH脚本。没有成功。
有没有办法使用Jenkins凭证在构建步骤中运行git命令?
我目前的解决方案是将SSH密钥作为构建环境设置的一部分复制到从属服务器,但看起来像是重复工作(加上潜在的安全问题)。
答案 0 :(得分:0)
我暂时也无法弄清楚。因此,尽管将近三年了,但我将发布使用私有SSH密钥的解决方案。它也可以是适应性的用户/密码组合。
将密钥添加为凭据部分,类型为“带私钥的SSH用户名”。
在构建项目中使用“绑定”(您需要在构建环境中勾选“使用秘密文本或文件”以使其可用)将凭证信息存储在环境变量中:
现在介绍了如何在git调用中使用键的棘手部分。我选择了GIT_SSH环境变量,因为它是最向后兼容的方式。为了完成这项工作,您需要使用SSH_KEYFILE
中提供的密钥文件的路径,创建一个包含ssh调用的包装器脚本。可能会发现一种更好的解决方案来创建该脚本。对我来说,以下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 git@someserver.com:some_repo.git HEAD
答案 1 :(得分:-1)
如果通过git运行共享凭据至关重要,请尝试git client plugin,但如果您真的只想共享/存储凭据,请考虑使用credentials plugin或类似内容。
请注意,您也可以在安装后运行shell脚本""可以运行你需要在机器上执行的任何命令。