Мне не удается заставить Дженкинса создать указанный тег. Тег является частью параметризованной сборки, но я не знаю, как передать его в плагин git, чтобы просто создать этот тег. Это заняло у меня 3 часа, и я признал поражение мастерам при переполнении стека.
121
Ответы:
Я смог сделать это с помощью параметра «ветви для создания»:
Замените [tag-name] названием вашего тега.
источник
HEAD
. Логика плагина git, кажется, сравнивает эти две ревизии, которые в моем репозитории всегда не равны, и поэтому всегда запускается новая сборка.Ни один из этих ответов не был для меня достаточным при использовании Jenkins CI v.1.555, плагина Git Client v.1.6.4 и плагина Git 2.0.4.
Я хотел создать задание для одного репозитория Git для одного конкретного фиксированного (т. Е. Не параметризованного) тега. Мне пришлось сколотить решение из различных ответов плюс сообщение в блоге «создать тег Git», цитируемое Тило .
git push --tags
+refs/tags/*:refs/remotes/origin/tags/*
*/tags/<TAG_TO_BUILD>
(заменив<TAG_TO_BUILD>
на свое фактическое имя тега).Добавление Refspec для меня оказалось критичным. Хотя казалось, что репозитории git по умолчанию получают всю удаленную информацию, когда я оставил его пустым, плагин Git, тем не менее, полностью не смог найти мой тег. Только когда я явно указал «получить удаленные теги» в поле Refspec, плагин Git смог идентифицировать и строить из моего тега.
Обновление 2014-5-7 : К сожалению, это решение имеет нежелательный побочный эффект для Jenkins CI (v.1.555) и механизма push-уведомлений репозитория Git в стиле Stash Webhook для Jenkins : каждый раз, когда обновляется любая ветка в репозитории при нажатии снова запускаются задания построения тегов. Это приводит к множеству ненужных повторных построений одних и тех же заданий тегов снова и снова. Я пробовал настраивать задания как с опцией «Принудительный опрос с использованием рабочей области», так и без нее, но, похоже, это не помогло. Единственный способ предотвратить создание Дженкинсом ненужных сборок для заданий тегов - очистить поле Refspec (т.е. удалить
+refs/tags/*:refs/remotes/origin/tags/*
).Если кто-то найдет более элегантное решение, отредактируйте этот ответ с помощью обновления. Я подозреваю, например, что, возможно, этого не произошло бы, если бы refspec был конкретно,
+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
а не универсальной звездочкой. Однако на данный момент это решение работает для нас, мы просто удаляем лишние Refspec после успешного выполнения задания.источник
+refs/heads/*:refs/remotes/origin/*
то теперь он будет+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*
. (Я не очень много работал с refspecs, поэтому потребовались некоторые эксперименты, чтобы узнать, что это поле разделено пробелами.)Разве вы не можете сказать Дженкинсу, чтобы он строил по имени Ref? Если так, то это
Из всех вопросов, которые я вижу о Дженкинсе и Хадсоне, я бы предложил перейти на TeamCity. Мне не пришлось редактировать какие-либо файлы конфигурации, чтобы TeamCity заработал.
источник
git push --tags
Если вы используете конвейеры Jenkins и хотите проверить определенный тег (например:
TAG
параметр вашей сборки), вот что вы можете сделать:источник
В последней версии Jenkins (1.639 и выше) вы можете:
источник
1.0.1
) в поле веток для сборки.Я сделал что-то вроде этого, и это сработало:
Журнал Jenkins подтвердил, что он получал источник из тега
Проверка
0b4d6e810546663e931cccb45640583b596c24b9
версии (v0.9.5.2)источник
refspec
было уловкой, нажав кнопку «Дополнительно».Я установил в поле Advanced-> Refspec значение
refs/tags/[your tag name]
. Это кажется проще, чем другие предложения для Refspec, но у меня все сработало.ОБНОВЛЕНИЕ 23/7/2014 - На самом деле, после дальнейшего тестирования оказалось, что это не сработало, как ожидалось. Похоже, что версия HEAD все еще проверялась. Отмените это как принятый ответ. Я получил рабочее решение, подписавшись на сообщение от gotgenes в этой теме (30 марта). Упомянутая в этом посте проблема ненужного запуска сборок не была для меня проблемой, поскольку моя работа запускается из восходящего задания, а не из опроса SCM.
ОБНОВЛЕНИЕ АПРЕЛЬ-2018 - обратите внимание в комментариях, что это работает для одного человека и согласуется с документацией Jenkins.
источник
refs/tags/<tagname>
- это то, что сказано в документации Jenkins , и у меня это работает нормально. Возможно , плагин был багги в момент первоначального поста, но ... по состоянию на апрель 2018 года, это является правильным ответом.refs/tags
префикс и просто использовать<tagname>
. YMMV, но ... он отлично подходит для моих целей.Мне удалось заставить Дженкинса создать тег, установив Refspec и Branch Specifier, как подробно описано в этом сообщении в блоге. .
Мне также пришлось установить имя репозитория (в моем случае «origin»), чтобы я мог ссылаться на него в Refspec (в противном случае он явно использовал бы случайно сгенерированное имя).
источник
В итоге я сделал следующее:
jenkins-target
и попросил Дженкинса отслеживать этоjenkins-target
jenkins-target
веткиЯ не уверен, что это сработает для всех, мой проект был довольно маленьким, не слишком много тегов и прочего, но это очень легко сделать, не нужно возиться с refspecs, параметрами и прочим :-)
источник
Вы можете создать даже тип тега, например
1.2.3-alpha43
, используя подстановочные знаки:Refspec:
+refs/tags/*:refs/remotes/origin/tags/*
Спецификатор ветки:
origin/tags/1.2.3-alpha*
Вы также можете установить флажок « Строить, когда изменение отправлено на GitHub », чтобы инициировать отправку, но вы должны добавить действие «создать» в веб-перехватчик.
источник
Добавляю сюда свои два цента, поскольку я не видел ответа, в котором использовалась бы опция «Построить с параметрами» в Jenkins.
Здесь я использую консоль браузера Jenkins CI для проекта starwars_api, и мне удалось выполнить сборку напрямую с помощью команды «Сборка с параметрами» со значением refs / tags / tag-name
построить с именем тега ref
источник