J'essaie d'analyser mon code source avec Sonar en utilisant les pipelines Jenkins. Pour demander à Sonar d'informer Github des résultats, je dois spécifier l'ID de demande d'extraction.
Comment puis-je obtenir cet ID de demande d'extraction auprès de Jenkins Pipelines?
Nous utilisons GitHub Organization Folder Plugin
pour créer des demandes de tirage, pas GitHub pull request builder plugin
. C'est pourquoi $ghprbPullId
ne fonctionne pas pour moi. Des idées sur la façon d'obtenir l'ID de demande de tirage d'une manière différente?
Jenkins expose une variable globale nommée CHANGE_ID:
Pour un projet multibranches correspondant à une sorte de demande de changement, celui-ci sera défini sur l'ID de changement, tel qu'un numéro de demande d'extraction.
Cette variable n'est remplie que pour les builds de demande d'extraction, vous devez donc désactiver les builds de branche et activer les builds PR dans la configuration de votre pipeline pour les sources de branche:
Mon étape de pipeline ressemble alors à ceci:
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}"
}
}
}
}
Dans le cas où la réponse de Thomas ne fonctionne pas ou ne s'applique pas à vous, vous pouvez également (éventuellement) utiliser le nom de la branche pour obtenir le numéro de demande d'extraction en interrogeant l'API Github REST. Tout ce que vous besoin est un jeton d'API et le nom de la branche, recherchez les demandes d'extraction par ordre de date de mise à jour de DESC et recherchez le premier PR qui correspond au nom de votre branche. Celui-ci aura le numéro de demande d'extraction.
Cela ne fonctionne que si vous avez un nom de branche unique pour chaque demande d'extraction (comme un numéro de ticket d'émission JIRA).
Vous obtenez le numéro PR par exemple env.BRANCH_NAME
.
if (env.BRANCH_NAME.startsWith('PR-')) {
def prNum = env.BRANCH_NAME.replace(/^PR-/, '')
...
}