如何为 jenkins git 插件指定 ssh 密钥

Posted

技术标签:

【中文标题】如何为 jenkins git 插件指定 ssh 密钥【英文标题】:How to specify an ssh key for the jenkins git plugin 【发布时间】:2017-01-30 18:51:05 【问题描述】:

我正在使用git plugin,据说它集成了“Jenkins 凭据管理功能”:

凭据:用于连接到存储库的凭据(除非允许匿名访问),使用 Jenkins 凭据管理功能。使用的凭证类型取决于底层协议。对于 SSH 连接,仅支持私钥身份验证。

太好了,“Jenkins 凭据管理功能”对我有用:我能够运行“来自 SCM 的管道脚本”。

那么,如何在 git 插件中使用这些凭据? git 插件文档和网络中都没有示例。这是我的 Jenkinsfile 的相关部分,带有 git 步骤:

node 
    stage('Checkout') 
        git url: 'ssh://git@5.6.7.8:5999/my/repo.git', branch: 'wip'
    
    ...

【问题讨论】:

尝试转到Jenkins > Credentials > System > Global credentials > Add Credentials,然后选择SSH Username with private key?然后在您的 Jenkins 工作中,您只需在设置工作时引用这些凭据。您不必使用全局凭据,您可以使用不同的域。 @Harmelodic:如前所述,添加了凭据,并且它们正在工作。我只是不知道如何在运行管道的 Jenkinsfile 的 Checkout 阶段从 git 命令中引用它们。 我没有对此进行测试,但根据documentation(滚动到最后),您可以使用GenericSCMStep 并提供一个credentialIdcheckout scm: [$class: 'MercurialSCM', source: 'ssh://hg@bitbucket.org/user/repo', clean: true, credentialsId: '1234-5678-abcd'], poll: false。或者你有this sample使用命令行git客户端和Credentials Binding Plugin,也未经测试。 @delavnog 你能解决这个问题吗?我也无法让它使用我的 ssh 凭据 【参考方案1】:

他们似乎同时添加了一些文档: https://jenkins.io/doc/pipeline/steps/git/

因此,对于您的示例,以下内容应该有效:

checkout([$class: 'GitSCM', branches: [[name: '*/wip']],
    userRemoteConfigs: [[url: 'ssh://git@5.6.7.8:5999/my/repo.git',
    credentialsId: 'your-credentials-id']]])

【讨论】:

以上是关于如何为 jenkins git 插件指定 ssh 密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何为包含空格的 Jenkins 环境变量指定值

如何为每个部署目标指定 Jenkins 部署配置

如何为本地 git (github) 存储库永久添加 SSH 密钥? [复制]

如何为 Git 子模块使用 SSH 而不是 HTTP?

Jenkins安装和持续集成环境配置

在 Jenkins for Git 中管理 SSH 密钥