Плагін Jenkins Git: Як створити конкретний тег?


120

У мене виникають проблеми з тим, як домогтися Дженкінса зібрати вказаний тег. Тег є частиною параметризованої збірки, але я не знаю, як передати це до плагіна git, щоб просто створити цей тег. Це займало 3 години мого дня, і я допустив поразку майстрам при переповненні стека.


Ви маєте на увазі, що це відрізняється від stackoverflow.com/questions/7157170/… ? (третій результат google.com/… )
VonC

1
"Це займало 3 години мого дня" - я не так лінивий, що 3 години мого дня не включали в себе будь-яке посилання, яке я міг би знайти в Google :)
sksamuel

1
Ви впевнені, що хочете зробити це так? Ви усвідомлюєте, що позначення в git не масштабується ? Можливо, ви могли просто використати завдання "виконати оболонку", щоб написати сценарій, щоб перевірити тег / версію, яку ви дійсно хочете?
mpontillo

Відповіді:


222

Я зміг це зробити за допомогою параметра "гілки для побудови":

Branch Specifier (blank for default): tags/[tag-name]

Замініть [тег-ім’я] на ім’я вашого тегу.


5
Я не знаю, чому це не має більше +1. Цей запис у блозі ерік-нот заплутаний як пекло. Це просто і чудово працює. Дякую!
Cody S

3
Для мене чудово працювали. Дякую. Мій параметр отримав назву RELEASE_TAG, тому я використовував теги / $ {RELEASE_TAG} як значення для специфікатора відділення.
Wesley Womack

3
Не вдалося змусити це працювати. Чомусь не можна перевірити тег. Я отримую: 'ПОМИЛКА: Не вдалося знайти будь-яку редакцію для складання. Перевірте конфігурацію сховища та гілки для цього завдання. ' Я вказую теги / 3.0.1, я також спробував * / tags / 3.0.1 Я переконався, що тег існує.
втраченопереклад

1
Коли я намагаюся зробити те, що пропонується у цій відповіді, кожне опитування сховища викликає нарощування. Журнал опитування git буде постійно показувати, що "Last Built Revision" - це редакція тегу, але "Остання віддалена редакція головного перегляду" є переглядом найновішої HEAD. Логіка плагіну git, схоже, порівнює ці дві версії, які в моєму сховищі завжди нерівні, і таким чином завжди створюється нова збірка.
Луї

Це, безумовно, має бути правильна відповідь, це спрацювало для мене і так просто. Хоча я не опитую репо, тому я думаю, що це все ще існує.
Джеремі

76

Жодна з цих відповідей мені не була достатньою, використовуючи плагін Jenkins CI v.1.555, плагін Git Client v.1.6.4 та плагін Git 2.0.4.

Я хотів, щоб робота була створена для одного сховища Git для одного конкретного, фіксованого (тобто, не параметризованого) тегу. Мені довелося спільно обробляти рішення з різних відповідей плюс повідомлення про блог "побудувати тег Git", на яке посилається Тіло .

  1. Переконайтеся, що ви натискаєте тег до віддаленого сховища git push --tags
  2. У розділі "Git Repository" вашої роботи під заголовком "Управління вихідним кодом" натисніть "Додатково".
  3. У поле для Refspec додайте наступний текст: +refs/tags/*:refs/remotes/origin/tags/*
  4. У розділі "Гілки для побудови", "Специфікатор гілки" поставте */tags/<TAG_TO_BUILD>(замінивши <TAG_TO_BUILD>власне ім'я тегу).

Додавання Refspec для мене виявилося критичним. Хоча здавалося, що сховища git отримують всю віддалену інформацію за замовчуванням, коли я залишаю її порожньою, плагін Git все-таки не зможе знайти мій тег. Тільки коли я чітко вказав "отримати віддалені теги" в полі Refspec, плагін Git міг ідентифікувати та створювати з мого тегу.

Оновлення 2014-5-7 : На жаль, дане рішення має небажаний побічний ефект для Jenkins CI (v.1.555) та механізму сповіщення репозиторію Git à la Stash Webhook до Jenkins : будь-коли оновлюється будь- яка гілка репозиторію під час натискання завдання для створення тегів також знову запустяться. Це призводить до багато зайвих повторних збірок одних і тих же завдань тегів. Я спробував налаштувати завдання як за допомогою, так і без опції «Примусове опитування за допомогою робочої області», і, здавалося, це не дало ефекту. Єдиний спосіб, який я міг би запобігти Дженкінсу робити зайві складання для завдань тегів, - це очистити поле Refspec (тобто видалити +refs/tags/*:refs/remotes/origin/tags/*).

Якщо хтось знайде більш елегантне рішення, будь ласка, відредагуйте цю відповідь оновленням. Я підозрюю, наприклад, що, можливо, цього не відбудеться, якби конкретний респект був, +refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>а не загальним зірочкою. Поки що це рішення працює для нас, ми просто видаляємо додатковий Refspec після того, як робота буде успішною.


4
Щоб "додати наступний текст" до refspec ... якщо ваш refspec був раніше, +refs/heads/*:refs/remotes/origin/*він буде зараз +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*. (Я не працював із рефлексами багато, тому знадобився певний експеримент, щоб дізнатися, що це поле
обмежене космосом

1
Додатковий +1 для цього рішення. Попередні рішення також не спрацювали для мене.
whitespy9

16

Ви не можете сказати Дженкінсу будувати з імені Ref? Якщо так, то це так

refs/tags/tag-name

З усіх питань, які я бачу про Дженкінса та Хадсона, я б запропонував перейти на TeamCity. Мені не довелося редагувати жодні файли конфігурації, щоб змусити TeamCity працювати.


Ви не перша людина, яка насправді запропонувала місто команди. Невже це набагато краще? Я можу це перевірити.
sksamuel

1
@monkjack Я спробував той самий синтаксис на одному з моїх репо, і він спрацював. Чи можете ви перерахувати ваші поточні теги? Ви впевнені, що спеціально натиснули цей тег на віддалене репо зgit push --tags
Andrew T Finnell,

4
Наближаючись. Я не натискав теги на віддалений, але зараз я. Я можу змусити будувати дженкіни зараз, використовуючи refs / tags / harpercollins-1.0.16, проте він завжди наполягає на будівництві незалежно від того, що я туди вкладаю. Я підтвердив, що в пульті є тег (можна побачити його в gitweb) і, зроблений знімок цього тегу, підтверджує, що все там належним чином.
sksamuel

6
TeamCity є власником, що робить його майже марним.
сленг

2
О так, перехід від безкоштовного інструменту до комерційного - це правильний вибір! Коли реактивні реагенти винаходять колесо і створюють новий трекер про помилки, чи пропонуєте ви іншим перейти з багзіли на це?
m1ld

11

Якщо ви використовуєте трубопроводи Jenkins і хочете перевірити певний тег (наприклад: TAGпараметр вашої збірки), ось що ви можете зробити:

stage('Checkout') {
  steps {
    checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: 'YOUR_GIT_REPO_URL.git', credentialsId: 'YOUR_GIT_CREDENTIALS_ID' ]], branches: [[name: 'refs/tags/${TAG}']]], poll: false
  }
}

9

В останній Дженкінс (1.639 і вище) ви можете:

  1. просто вкажіть назву тегу в полі "Гілки для побудови".
  2. у параметризованій збірці ви можете використовувати параметр як змінну в тому ж полі "Гілки для побудови", тобто $ {Branch_to_build}.
  3. ви можете встановити плагін Git Parameter, який надасть вам функціональність, перерахувавши всі доступні гілки та теги.

1
Дійсно, просто введення імені тегу працювало і для мене. Хоча в документації для цього додатка git все ще йдеться про те, що робити це не повинно: "<tagName>: Це не працює, оскільки тег не буде розпізнаний як тег. Замість цього використовуйте refs / tags / <tagName>."
Zitrax

Це працювало для мене в Jenkins 1.532.3, я тільки що вказав версію тегу (наприклад 1.0.1) у гілках для створення поля.
Андре

9

Я зробив щось подібне, і це спрацювало:

Source Code Management

 Git    
    Repositories    


 Advance

Name: ref
Refspec : +refs/tags/*:refs/remotes/origin/tags/* 

 Branches to build  
 Branch Specifier (blank for 'any') : v0.9.5.2

введіть тут опис зображення

Журнал Дженкінса підтвердив, що отримує джерело з тегу

Перевірка редакції 0b4d6e810546663e931cccb45640583b596c24b9(v0.9.5.2)


Це чудово підходить для створення всіх тегів, дякую! Додавання цього refspecбуло фокусом, натиснувши кнопку «Додатково».
стайф

9

Я встановив поле Advanced-> Refspec на refs/tags/[your tag name]. Це здається простішим, ніж різні пропозиції щодо Refspec, але для мене це спрацювало чудово.

ОНОВЛЕННЯ 23/7/2014 - Насправді після подальшого тестування виявляється, що це не спрацювало так, як очікувалося. Здається, що версія HEAD ще перевіряється. Відмініть це як прийняту відповідь. Я закінчив отримувати робоче рішення, дотримуючись публікації від getgenes у цій темі (30 березня). Проблема, згадана на цій посаді про непотрібне запускання збірок, не була проблемою для мене, оскільки моя робота ініціюється з вищезазначеної роботи, а не з опитування SCM.

ОНОВЛЕННЯ КВІТКУ 2018 - В коментарях зауважте, що це працює для однієї людини, і погоджується з документацією Дженкінса.


Просто хотілося б відзначити , що чотири роки після того, як ця відповідь була розміщений, використовуючи refs/tags/<tagname>то , що документація Дженкінс каже , слід використовувати, і це працює прекрасно для мене. Можливо , такий модуль був баггі в момент початкового поста, але ... за станом на квітень 2018 року, це є правильною відповіддю.
ухилення від потоку

Оновлення попереднього коментаря: Насправді я виявив, що можу опустити refs/tagsпрефікс і просто використовувати <tagname>. YMMV, але ... це чудово працює для моїх цілей.
ухилення від потоку

3

Мені вдалося змусити Дженкінса побудувати тег, встановивши специфікатор Refspec і Branch, як це детально описано в цій публікації блогу .

Я також повинен був встановити ім'я сховища (в моєму випадку "походження"), щоб я міг посилатись на нього у Refspec (інакше воно, мабуть, використовувало б випадкове генероване ім'я).


2

Що я зробив у підсумку:

  • створили нову філію jenkins-targetі отримали дженкіни для відстеження цього
  • злиття з будь-якої гілки або тегу, яку я хочу побудувати на jenkins-target
  • як тільки збірка працювала, тести проходили тощо, просто створіть тег із jenkins-targetгілки

Я не впевнений, чи спрацює це для всіх, мій проект був зовсім маленьким, не надто багато тегів і речей, але це мертво легко, не потрібно возитися з рефлексами та параметрами та іншим :-)


Мені подобається цей дуже простий підхід.
zochhuana

2

Ви можете створити навіть тип тегу, наприклад 1.2.3-alpha43, використовуючи символи:

Рефлекс: +refs/tags/*:refs/remotes/origin/tags/*

Специфікатор відділення: origin/tags/1.2.3-alpha*

Ви також можете поставити галочку " Побудувати, коли зміна буде натиснуто на GitHub ", щоб викликати натиск, але ви повинні додати дію "створити" до веб-камери


1

Додавши сюди свої два центи, оскільки я не бачив відповіді, яка використовує опцію "Зробити з параметрами" в Дженкінсі.

Ось я використовую консоль браузера Jenkins CI для проекту starwars_api і мені вдалося створити безпосередньо за допомогою "Збірка з параметрами" зі значенням refs / tags / tag-name

  1. виберіть варіант "побудувати з параметрами".
  2. додайте значення у поле як "refs / tags / tag_142" (мій приклад tag_name = tag_142)

будувати з назвою тегу ref

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.