Jenkins脚本化管道为“ sh”构建步骤提供了GitHub SSH凭据

时间:2018-10-31 10:58:17

标签: git jenkins github ssh jenkins-pipeline

我在脚本化的Jenkins管道中有一个sh步骤,依次要求git通过SSH(这是一个处理GitHub上托管的依赖项的依赖项管理系统)来克隆私有GitHub存储库的步骤。管道本身是通过GitHub Organization Plugin执行的。它包含一个checkout scm命令,该命令也访问一个私有存储库,从日志中我看到它利用GIT_SSH环境变量将登录信息传递到该步骤(可以正常工作)。有没有办法将相同的信息也传递到另一个步骤,即我的sh "install_dependencies.sh"步骤?请注意,withCredentials将使我可以通过环境变量访问凭据,但是如何将它们传递给git? GIT_SSH是ssh包装脚本的路径,我不知道该如何使用withCredentials生成。还有另一种通过环境变量将凭据传递给git的方法吗?

最小的Jenkinsfile如下所示:

node {
    checkout scm  // successfully accesses github credentials
    withCredentials([
        // what to put here?
    ]) {
        // install python dependencies
        sh 'pip install -r requirements.txt'
    }
    sh 'pytest'
}

文件requirements.txt列出了相关性,其中包含一行格式 -e git+ssh://git@github.com/some_private/repo@dev#egg=egg_name 指示pip通过git获取需求。

可能可以使用另一个Jenkins checkout scm步骤来手动检出代码,然后从Jenkinsfile中安装它。但是,这将使requirements.txt成为需求的唯一事实来源的目的无法实现。

1 个答案:

答案 0 :(得分:0)

我刚刚找到了问题,根据文档,对我有用的是

        withCredentials([sshUserPrivateKey(credentialsId: 'Credential-id', keyFileVariable: 'CERT')]) {
      sh 'cp -prf $CERT ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa'
}

这会将证书从其位置复制到本地docker证书存储区。 这比我在进行依赖项拉取时可以克隆