如何在jenkins上使用SSH密钥批处理运行git命令?

4

我有一个批处理脚本在我的Jenkins流水线上运行。

它用于标记我的分支的特定提交,并将其推回到Git。看起来像这样:

"scriptCommand": https://%C_USERNAME%:%C_PASSWORD%@bitbucket.psr.io/scme/ci/ci.git\ngit push origin TAG1\ngit remote set-url --push origin https://bitbucket..psr.io/scme/ci/ci.git"

该命令使用变量C_USERNAME、C_PASSWORD和TAG1。前两个变量取自于jenkins凭据中的usernamePassword类型,它们被注入到字符串中,TAG1是一个简单的字符串,应该用来获取我的git分支标签。

当我使用http链接而不是SSH链接时,这个命令可以正常工作。

我需要能够处理SSH链接。为此,我研究了SSH私钥,结果发现jenkins凭据有一个专门的字段:SSH用户名和私钥。

我在jenkins中创建了这样的凭据,使用了我的私钥和用户名。

但现在我遇到了一个问题,就是如何创建一个批处理行,使其与上面那个http链接的命令相同。

不用说,我对这个问题一窍不通。

有人可以帮我吗?谢谢你的时间。

1个回答

5
SSH URL将类似于:
git@bitbucket.psr.io/scme/ci/ci.git

但是您可能希望使用一个专用的插件,比如通过SSH发布,您可以将其包含在流水线中

在您的情况下:

git remote set-url --push origin git@bitbucket.psr.io/scme/ci/ci.git

使用SSH代理插件
node {
  sshagent (credentials: ['myKey']) {
    sh 'git push git@bitbucket.psr.io/scme/ci/ci.git aTag'
  }
}

假设您已经在Jenkins全局凭据(不受限制)中注册了您的私钥,名称为'myKey'。
使用withCredentials,如此处所示,假设Git 2.10+用于GIT_SSH_COMMAND
withCredentials([sshUserPrivateKey(credentialsId: "myKey", keyFileVariable: 'key')]) {
        //auth to git here then do some commands for example:
        sh 'git commmit -am "hello my commit message'
        sh 'GIT_SSH_COMMAND = "ssh -i $key"'
        sh 'git push git@bitbucket.psr.io/scme/ci/ci.git aTag'
    }

谢谢建议,我会尝试一下,但是你能告诉我如果我需要在SSH类型的链接中添加标签,git命令应该是什么样子的吗? - Elydasian
如果我在问题中使用了我上面发布的那一行,它会将一个标签推送到我的git仓库(使用http协议),那么如果我要使用ssh协议,那么同样的命令应该是什么样子呢?(希望这样说得清楚:)) - Elydasian
@Elydasian 好的,明白了。set-url 应该是:git remote set-url --push origin git@bitbucket.psr.io/scme/ci/ci.git - VonC
谢谢,那个方法可行!另外,我正在研究这个答案 https://dev59.com/tVcP5IYBdhLWcg3wd5qm,由tianzhipeng发布,你能看一下吗?我已经接近实现ssh密钥了,但是我不知道keyFileVariable: 'keyfile'是用来做什么的? - Elydasian
@dssof 这意味着该作业没有检出 Git 存储库。请尝试提出一个单独的问题,详细说明您的 Jenkins 设置和作业配置。 - VonC
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接