@ALexhha
DevOps Engineer

Jenkins: как запускать build только при появлении нового тега в git?

Привет всем,

столкнулся с казалось бы тривиальной задачей в Jenkins — необходимо запускать build при попадании нового тега с определенным именем, например build_[0-9]{6,10}. Сам код хранится на github, так как права ограничены, то использую SCP Polling для опроса изменений.

Казалось бы все должно быть очень просто, а на деле оказалось что нет. Использую следующие параметры
Name: origin
Refspec: +refs/tags/*:refs/remotes/origin/tags/*
Branch Specifier: :.*/tags/build_[0-9]{6,10}$

Например у нас есть следующая история
550313e  -> 22ce31f -> e31e663 -> e4c4bf6 (head)
  tag1       tag2        tag3       tag4

В таком случае все работает как и ожидалось, каждый раз при появлении нового тега Jenkins запускает build, т.е. при следующих командах
$ git tag build_000002 550313e && git push --tags -u origin
$ git tag build_000003 22ce31f && git push --tags -u origin
$ git tag build_000004 e31e663 && git push --tags -u origin
$ git tag build_000001 e4c4bf6 && git push --tags -u origin

будет запущенно 4 сборки. Но, если мы сначала тегируем head, то сборка будет запущена только для head, для остальных 3х тегов она будет игнорироваться.
550313e  -> 22ce31f -> e31e663 -> e4c4bf6 (head)
  tag2       tag3        tag4       tag1

$ git tag build_000001 e4c4bf6 && git push --tags -u origin
$ git tag build_000002 550313e && git push --tags -u origin
$ git tag build_000003 22ce31f && git push --tags -u origin
$ git tag build_000004 e31e663 && git push --tags -u origin


Можно ли без велосипедов и ручной фильтрации тегов реализовать данное поведение?
  • Вопрос задан
  • 2688 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ashumkin
системный разработчик
погодите-погодите? почему у вас build проходит только в релизы? ))
у вас CI?
CI - это build на каждое изменение репозитория

З.Ы. я использую другой CI-сервер (QuickBuild), у меня схема такая:
на каждый коммит - сборка (компиляция, тесты)
а когда делаем релиз, то он - это тот коммит, который успешно прошёл сборку
и уже САМ СЕРВЕР заново делает сборку с ключами, типа, "Это Release", тесты уже не прогоняет, т.к. этот коммит ставит тег на этот коммит, и пушит тег в "центральный" репозиторий
как по мне, это более правильная схема
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы