詹金斯git推多个分支

时间:2017-11-28 09:06:41

标签: git jenkins ssh push

我有一个由shell脚本构成的Jenkins作业,我用它来管理我的git流程。该脚本通过SSH连接到远程git仓库,并对分支devmaster进行更改。我希望它将这两个分支推回到远程仓库。

Git Publisher构建操作允许您将HEAD推送到一个远程分支,但不允许推送多个分支](https://issues.jenkins-ci.org/browse/JENKINS-21681)。

我尝试从shell脚本执行“git push”但我得到“Permission denied(publiuc key)”。在构建日志中,我可以看到Jenkins使用插件为预构建和后构建操作注入SSH凭据:

[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Done
Cloning the remote Git repository
Cloning repository git@my.repo.url:path/to/repo/test.git
 > git init /home/jenkins/workspace/node-injection/release # timeout=10
Fetching upstream changes from git@my.repo.url:path/to/repo/test.git
...
Seen branch in repository origin/dev
Seen branch in repository origin/master
Seen 2 remote branches
# ... do some work
+ git push origin master dev --follow-tags
Fetching origin
Permission denied (publickey).
fatal: Could not read from remote repository.

有没有办法将SSH凭据传递给shell脚本,以便它可以git push

我不想将用户/密码传递给shell脚本,因为这会迫使我为每个我管理的存储库创建一个用户,而我可以为单个用户创建多个部署密钥(这更容易管理)。

2 个答案:

答案 0 :(得分:1)

我最终找到了答案:

  1. 为git存储库创建SSH凭据时:don't use a passphrase
  2. 在您的Jenkins作业配置中,选中"使用秘密文本或文件"并添加一个" SSH凭证"具有所需凭据的条目。在"密钥文件变量"字段,输入GIT_SSH_KEYS_PATH
  3. 为每个需要它的命令注入ssh凭据,如下所示:

    GIT_SSH_COMMAND="ssh -i $GIT_SSH_KEYS_PATH" <git-command>
    

    例如:

    GIT_SSH_COMMAND="ssh -i $GIT_SSH_KEYS_PATH" git push origin master dev --follow-tags
    

答案 1 :(得分:0)

  

有没有一种方法可以将SSH凭据传递到Shell脚本,以便它可以进行git push?

您可以使用sshagent plugin将凭据上下文注入您的Shell脚本执行中(pipeline script示例的相关片段):

stage('Build') {
        steps {
            sshagent(['a1b36f46-341c-4ffd-941f-5f2fd547d8f8']) {
                sh "./my-git-push-script.sh"
            }
        }
    }

因此,将使用给定的凭据建立共享会话,如果成功,将使用shell脚本。 Git push命令将利用此ssh会话与SCM通信。

注意:您必须在詹金斯语中提供previously setup credential unique identifier

相关问题