Jenkinsパイプラインを使用してSonarでソースコードを分析しようとしています。 Sonarに結果をGithubに通知するように依頼するには、プルリクエストIDを指定する必要があります。
Jenkins PipelinesからこのプルリクエストIDを取得するにはどうすればよいですか?
GitHub Organization Folder Plugin
ではなく、GitHub pull request builder plugin
を使用してプルリクエストを作成しています。 $ghprbPullId
が機能しないのはそのためです。別の方法でプルリクエストIDを取得する方法はありますか?
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}"
}
}
}
}
Thomasの答えがうまくいかない、または当てはまらない場合は、(おそらく)Github REST API。必要なのはAPIトークンとブランチ名で、更新されたDESCの日付順にプルリクエストを検索し、ブランチ名に一致する最初のPRを見つけます。
これは、プルリクエストごとに一意のブランチ名(JIRA発行チケット番号など)がある場合にのみ機能します。
たとえば、env.BRANCH_NAME
。
if (env.BRANCH_NAME.startsWith('PR-')) {
def prNum = env.BRANCH_NAME.replace(/^PR-/, '')
...
}