Как получить идентификатор запроса извлечения из 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).

Другие вопросы по тегам