web-dev-qa-db-ja.com

Jenkins PipelineからプルリクエストIDを取得する方法

Jenkinsパイプラインを使用してSonarでソースコードを分析しようとしています。 Sonarに結果をGithubに通知するように依頼するには、プルリクエストIDを指定する必要があります。

Jenkins PipelinesからこのプルリクエストIDを取得するにはどうすればよいですか?

GitHub Organization Folder Pluginではなく、GitHub pull request builder pluginを使用してプルリクエストを作成しています。 $ghprbPullIdが機能しないのはそのためです。別の方法でプルリクエストIDを取得する方法はありますか?

18

Jenkinsは、CHANGE_IDという名前のグローバル変数を公開します。

ある種の変更要求に対応するマルチブランチプロジェクトの場合、これはプル要求番号などの変更IDに設定されます。

この変数はプルリクエストビルドに対してのみ入力されるため、ブランチソースのパイプラインの構成でブランチビルドを無効にし、PRビルドを有効にする必要があります。

enter image description here

パイプラインステップは次のようになります。

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}"
                }
            }
        }
    }
21
Thomas

Thomasの答えがうまくいかない、または当てはまらない場合は、(おそらく)Github REST API。必要なのはAPIトークンとブランチ名で、更新されたDESCの日付順にプルリクエストを検索し、ブランチ名に一致する最初のPRを見つけます。

これは、プルリクエストごとに一意のブランチ名(JIRA発行チケット番号など)がある場合にのみ機能します。

2
Michael Butler

たとえば、env.BRANCH_NAME

if (env.BRANCH_NAME.startsWith('PR-')) {
    def prNum = env.BRANCH_NAME.replace(/^PR-/, '')
    ...
}
2
stigsb