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

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

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

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

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

1 ответов


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

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

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

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

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