21

我正在尝试使用 Jenkins 管道使用 Sonar 分析我的源代码。要让 Sonar 将结果通知 Github,我需要指定 Pull Request ID。

如何从 Jenkins Pipelines 获取此 Pull Request ID?

我们GitHub Organization Folder Plugin用于构建拉取请求,而不是GitHub pull request builder plugin. 这就是为什么$ghprbPullId不适合我。任何想法如何以不同的方式获取拉取请求 ID?

4

3 回答 3

22

Jenkins 公开了一个名为 CHANGE_ID 的全局变量:

对于与某种变更请求对应的多分支项目,这将设置为变更 ID,例如拉取请求编号。

此变量仅针对拉取请求构建填充,因此您必须在管道的分支源配置中禁用分支构建并启用 PR 构建:

在此处输入图像描述

然后我的管道步骤如下所示:

def PULL_REQUEST = env.CHANGE_ID

stage('Analysis') {
        withCredentials([[$class: 'StringBinding', credentialsId: '***', variable: 'GITHUB_ACCESS_TOKEN']]) {
            withSonarQubeEnv('Sonar') {
                withMaven(maven: 'M3') {
                    sh "mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar " +
                            "-Dsonar.analysis.mode=preview " +
                            "-Dsonar.github.pullRequest=${PULL_REQUEST} " +
                            "-Dsonar.github.oauth=${GITHUB_ACCESS_TOKEN}"
                }
            }
        }
    }
于 2017-01-20T16:42:25.727 回答
4

例如,您可以通过 PR 获得 PR 编号env.BRANCH_NAME

if (env.BRANCH_NAME.startsWith('PR-')) {
    def prNum = env.BRANCH_NAME.replace(/^PR-/, '')
    ...
}
于 2017-01-17T20:34:28.083 回答
4

如果 Thomas 的回答对您不起作用或不适用于您,您也可以(可能)使用分支名称通过查询 Github REST API 来获取 Pull Request 编号。您只需要一个 API 令牌和分支名称,按照更新日期 DESC 的顺序查找拉取请求,并找到与您的分支名称匹配的第一个 PR。这将具有拉取请求编号。

这仅适用于每个拉取请求都有唯一的分支名称(例如 JIRA 问题票号)。

于 2018-04-19T14:35:27.300 回答