3

我正在尝试在我们客户的 Jenkins 上使用 Gradle发布插件(1.x,所以没有 Jenkinsfile 管道……)。我在我的盒子上测试了它,一切都很好。但是,当我调用构建作业时,它会失败并显示以下输出:

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

我知道 Jenkins 有一组 Git SSH 凭证,因为这项工作首先要使用这些从 Git 签出新副本。

我们如何使发布插件使用在结帐期间为作业配置的凭据?

4

2 回答 2

3

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

1.) 将 SSH 密钥放在用户 jenkins ~/.ssh/id_rsa 下,如下所述

2.) 在 gradle 发布之前使用“Execute shell”来配置远程:

在此处输入图像描述

令牌必须配置为环境变量。这是为了回答最初的问题。

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"
                }
            }
        }
    }
于 2019-01-15T20:41:43.410 回答
0

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

  1. 检查选项Use secret text(s) or file(s)。选择 git 凭据并输入您需要导入的环境变量的名称。
  2. 在 Gradle 构建部分中,将您的关键环境变量(以及其他如果需要)作为项目属性导入:-Pkeylocation=$KEY_VARIABLE_NAME
于 2018-06-11T17:02:04.477 回答