Как получить идентификатор запроса извлечения из Jenkins Pipeline
Я пытаюсь проанализировать свой исходный код с помощью Sonar с использованием конвейеров Jenkins. Чтобы попросить Sonar уведомить Github о результатах, мне нужно указать идентификатор запроса на извлечение.
Как я могу получить этот идентификатор запроса извлечения от Jenkins Pipelines?
Мы используем GitHub Organization Folder Plugin
строить запросы на извлечение, а не GitHub pull request builder plugin
, Вот почему $ghprbPullId
не работает для меня Есть идеи, как получить идентификатор запроса на получение другим способом?
3 ответа
Дженкинс предоставляет глобальную переменную с именем CHANGE_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}"
}
}
}
}
Вы получаете номер PR, например, через env.BRANCH_NAME
,
if (env.BRANCH_NAME.startsWith('PR-')) {
def prNum = env.BRANCH_NAME.replace(/^PR-/, '')
...
}
В случае, если ответ Томаса не работает или не применяется к вам, вы также можете (возможно) использовать имя филиала, чтобы получить номер запроса на извлечение, запросив REST API Github. Все, что вам нужно, - это токен API и имя ветви, ищите запросы на получение в порядке даты обновления DESC и находите первый PR, соответствующий вашему имени ветви. Это будет иметь номер запроса на вытягивание.
Это работает только в том случае, если у вас есть уникальное имя ветви для каждого запроса извлечения (например, номер заявки на выпуск JIRA).