Я работаю над интеграцией CI между GitLab и Jenkins, где я хочу выполнить конкретную проверку в зависимости от целевой ветви открытого запроса на слияние (MR).
Если говорить более конкретно, у нас естьрепозиторий, содержащий миграции баз данных Flyway, и мы хотели бы проверить в контейнере Docker, могут ли миграции быть успешно применены в различных средах.Целевая среда может быть выведена целевой ветвью запроса на слияние.
Теперь моя проблема заключается в следующем.Я хотел бы отклонить MR, которые не были успешно построены, но я не смог найти способ отклонения MR, только коммиты.
Способ нашей интеграции заключается в том, что Jenkins получает уведомления от webhook для обоих коммитов.и события MR.Таким образом, когда кто-то отправляет новый коммит в MR, будут запущены две сборки Jenkins - одна для всего MR и одна для фиксации.Сборка MR не удастся, но фиксация сборки будет успешной, и из-за условий гонки в том, как выполняются сборки, конвейер MR в GitLab будет помечен как успешный, хотя это не должно быть.
Есть лиспособ пометить запросы на слияние как неудачные в интеграции Jenkins-GitLab?
Я считаю, что эта функция называется конвейерами для запросов на слияние во встроенном CI / CD GitLabподдержка, но можно ли имитировать с Дженкинсом?
Вот эскиз Jenkinsfile, который я использую:
def isMergeRequest() {
gitlabActionType == 'MERGE' && gitlabTargetBranch != gitlabSourceBranch
}
pipeline {
agent any
stages {
stage('Validate') {
when {
expression {
isMergeRequest()
}
}
steps {
gitlabCommitStatus('Validate') {
sh "jenkins/validate_mr.py $gitlabTargetBranch $gitlabSourceBranch"
}
}
}
}
}