使用Jenkins Git插件的SSH密钥在Build期间运行Git命令

时间:2016-09-22 19:08:14

标签: git jenkins ssh slave

我们在Jenkins上的构建工作是作为发布构建的一部分运行一些git命令,如git push和git pull,因此需要一种方法在构建期间从shell运行经过身份验证的git命令。

我们的jenkins奴隶不会持有任何凭据,因为它们是按照构建创建的一次性docker容器。

git插件使用Jenkins凭证和"以某种方式"来管理它。设置GIT_SSH以获取通过凭证配置的私钥。

我检查了源代码,并尝试确定如何配置变量,以便我可以运行例如git pull作为构建的一部分的SSH脚本。没有成功。

有没有办法使用Jenkins凭证在构建步骤中运行git命令?

我目前的解决方案是将SSH密钥作为构建环境设置的一部分复制到从属服务器,但看起来像是重复工作(加上潜在的安全问题)。

2 个答案:

答案 0 :(得分:0)

我暂时也无法弄清楚。因此,尽管将近三年了,但我将发布使用私有SSH密钥的解决方案。它也可以是适应性的用户/密码组合。

  1. 将密钥添加为凭据部分,类型为“带私钥的SSH用户名”。

  2. 在构建项目中使用“绑定”(您需要在构建环境中勾选“使用秘密文本或文件”以使其可用)将凭证信息存储在环境变量中:

    enter image description here

  3. 现在介绍了如何在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脚本""可以运行你需要在机器上执行的任何命令。