Конвейер Jenkins, крючок битбакета и плагин выпуска maven, бесконечный цикл

Я не смог найти никакой информации об этом, поэтому я надеюсь, что вы, ребята, можете мне помочь в этом.

У меня есть проект maven, размещенный в битбакете, в котором есть BitBucket WebHook, указывающий на someurl/bitbucket-hook/ , этот хук запускает сборку моего проекта, который определяется конвейером, имеющим эту структуру:

node {
   stage 'Checkout'
   git url: 'https:...'

   def mvnHome = tool 'M3'

   #Various stages here
   ...
   stage 'Release'
   sh "${mvnHome}/bin/mvn -B clean install release:prepare release:perform release:clean"
}

проблема в том, что плагин выпуска maven отправляет изменения в BitBucket, и это снова запускает скрипт jenkins, создавая бесконечный цикл сборок, есть ли способ предотвратить это?

Я безуспешно пытался установить тихий период в Дженкинсе.


person Sebastian Yonekura Baeza    schedule 08.07.2016    source источник
comment
Изменить веб-хук, чтобы игнорировать изменения выпуска mvn?   -  person Rob Kielty    schedule 08.07.2016
comment
@RobKielty, где вы можете изменить веб-хук? в конфигурации jenkins задания я просто вижу флажок Build, когда изменение передается в BitBucket без дополнительных параметров, а в битовом ведре я просто могу выбрать триггер (push репозитория), есть ли другое место, где я могу изменить поведение триггер/вебхук?   -  person Sebastian Yonekura Baeza    schedule 08.07.2016


Ответы (3)


С моей точки зрения, у вас должны быть определенные задания для сборки и выпуска, а задание выпуска должно запускаться вручную. В любом случае, если есть какая-то причина использовать их в задании, вы можете проверить сообщение о последнем коммите:

node {
  git 'https...'
  sh 'git log -1 > GIT_LOG'
  git_log = readFile 'GIT_LOG'
  if (git_log.contains('[maven-release-plugin]')) {
    currentBuild.result = 'ABORTED'
    return
  }
  ... // continue with release or whatever

}
person amuniz    schedule 09.07.2016

Новый способ непрерывной доставки с помощью Maven и подход статьи Jenkins Pipeline решает бесконечный цикл:

Используйте подключаемый модуль релиза Maven для подготовки релиза с pushChanges=false (мы не собираемся отправлять коммиты релиза обратно в мастер) и prepareGoals=initialize (нам все равно, плохой ли тег, поскольку мы будем отправлять только те теги, которые хороший)

sh "${mvnHome}/bin/mvn -DreleaseVersion=${version} -DdevelopmentVersion=${pom.version} -DpushChanges=false -DlocalCheckout=true -DpreparationGoals=initialize release:prepare release:perform -B"
person Adi Sutanto    schedule 11.07.2016

Другим решением может быть изменение хука git (после получения) и добавление условного завитка, похожего на этот скрипт:

#!/bin/bash
git_log=$(git log --branches -1)
if ! [[ $git_log =~ .*maven-release-plugin.* ]] ;
then
curl http://buildserver:8080/git/notifyCommit?url=ssh://git@server/projects/name.git;
fi
person user2131878    schedule 27.11.2016