如何将Git SSH凭据传递给Jenkins的Gradle发布插件?

时间:2018-06-08 13:05:23

标签: jenkins gradle gradle-release-plugin

我正在尝试在客户端的Jenkins上使用Gradle release plugin(1.x,所以没有Jenkinsfile管道......)。我在盒子上测试过,一切都很好。但是,当我调用构建作业时,它会失败并输出:

Task :foundation:checkUpdateNeeded FAILED
Running [git, remote, update] produced an error: [Permission denied (publickey).

我知道Jenkins已经获得了一套Git SSH凭证,因为这项工作首先是从Git中查看一份新的副本。

我们如何让发布插件使用在结账时为作业配置的凭据?

2 个答案:

答案 0 :(得分:0)

假设这是一个自由式工作,并且您正在使用私钥进行身份验证:

  1. 选中Use secret text(s) or file(s)选项。选择git凭据并输入需要导入的环境变量的名称。
  2. 在Gradle构建部件中,将您的密钥环境变量(以及其他需要时)导入为项目属性:-Pkeylocation = $ KEY_VARIABLE_NAME

答案 1 :(得分:0)

Gradle版本不允许配置git凭据。即使这个问题是不必要的,我也会提出两种不同的可能性来解决这个问题,因为我整天都在为此而苦苦挣扎。为什么?因为我不再被允许在公司中使用SSH,所以我们将转向docker容器来分发我们的CI管道:

1。)按照说明here

将SSH密钥放在用户jenkins〜/ .ssh / id_rsa下

2。)在gradle版本之前使用“执行外壳”来配置遥控器:

enter image description here

令牌必须配置为an environment variable。回答最初的问题。

3。)使用管道可以包含更多高级功能。我在Jenkinsfile下面放置了gradle版本(您也可以使用sshagent (credentials: ['credential']),然后就不需要git了):

    // GITLAB_API_TOKEN
    withCredentials([string(credentialsId: 'nexususer', variable: 'nexusUsername'),
        string(credentialsId: 'nexuspassword', variable: 'nexusPassword'),
        string(credentialsId: 'nexussnapshoturl', variable: 'nexusSnapshotUrl'),
        string(credentialsId: 'nexusreleaseurl', variable: 'nexusReleaseUrl'),
        string(credentialsId: 'token', variable: 'GITLAB_API_TOKEN')]) {
        if (env.BRANCH_NAME == "master") {
            stage('Release') {
                gitlabCommitStatus(name: 'Release') {
                    // Run the gradle release
                    sh 'git config user.email "email"'
                    sh 'git config user.name "name"'
                    sh "git remote rm origin"
                    sh "git remote add origin https://username:${GITLAB_API_TOKEN}@yourrepo"
                    sh "gradle clean release -Prelease.useAutomaticVersion=true"
                }
            }
        }
    }