Подтвердить что ты не робот

Как заставить опрос SCM работать с плагином Jenkins Workflow

В обычном проекте freestyle я настраиваю плагин SCM, чтобы указать на репозиторий Git, который я хочу опубликовать, и включил опцию "Poll SCM", которая позволяет мне настраивать веб-сайт Stash, чтобы сообщать Дженкинсу всякий раз произошли изменения в этом репо. Таким образом, задание может запускаться всякий раз, когда изменение переносится на репо.

Но когда я использую рабочий процесс вместо проекта freestyle, SCM кода, который мне нужно построить, программно указывается в рабочем процессе groovy script, что означает, что он не прослушивает веб-чарт Stash. Вместо этого SCM, настроенный непосредственно в рабочем процессе, является SCM самого groovy script, который отличается от кодовой базы, которую я пытаюсь создать/отпустить, поэтому я не хочу, чтобы триггер был основан на том.

node('docker_builder') {
    git url: serviceRepo
    releaseVersion = getVersion()
    pipelineSpec = getPipelineSpec()
    sh "./gradlew clean build pushDockerImage"
}

Любые идеи о том, как добиться опроса SCM при использовании плагина рабочего процесса?

4b9b3361

Ответ 1

Я решил этот вопрос с большим количеством исследований и экспериментов. Эта документация привела меня на правильный путь: https://github.com/jenkinsci/workflow-scm-step-plugin/blob/master/README.md. В нем говорится:

Опрос поддерживается несколькими SCM (изменения в одном или нескольких запускают новую сборку) и снова выполняются в соответствии с SCM, используемыми в последней сборке рабочего процесса.

Это означает, что опрос SCM по-прежнему поддерживается рабочим процессом Jenkins, но, в отличие от обычного проекта freestyle, вы должны запускать его один раз вручную, прежде чем он начнет прослушивать изменения SCM. Это имеет смысл, поскольку SCM определены в коде Groovy; они не известны, пока они не запускаются один раз.

Один сложный элемент заключается в том, что вы можете определить много SCM в своем рабочем процессе. Например, у меня есть три: один для самой службы, развертывание script и Groovy DSL рабочего процесса. По умолчанию изменения в любом из этих трех SCM приведут к тому, что опция "Опрос SCM" запускает сборку, что может быть нежелательно. К счастью, установка опции "poll: false" на шаге "git" в коде Groovy отключит опрос на этом репо. Если вы читаете DSL Groovy из SCM, вы можете отключить опрос на этом репо, нажав "дополнительные действия" в пользовательском интерфейсе Jenkins и добавив "Не запускать сборку на уведомлениях о фиксации".

Другим сложным элементом является то, что плагин веб-крючка Stash по умолчанию включает хэш-код SHA1 коммита в URL-адрес RESTful, с которым он сталкивается с Jenkins. К сожалению, Дженкинс ошибается в использовании того же кода фиксации, когда пытается вытащить любой из нескольких SCM, которые вы, возможно, определили. Хэш-код, конечно, относится только к одному SCM, поэтому он ломается. Вы можете обойти это, установив "Omit SHA1 Hash Code" в плагин веб-крючка Stash. Затем Дженкинс будет использовать последнюю фиксацию на любой ветке, из которой вы строите, в каждом из ваших SCM.