Отримайте кілька репост із git у тій же робочій області Дженкінса


127

Використовуючи плагін Jenkins 1.501 та Jenkins Git 1.1.26

У мене є 3 різних git repos з декількома проектами.

Тепер мені потрібно перевірити всі проекти з 3 git repos в тій же робочій області на рабі Дженкінса. Я визначив кожне git repo в: Керування вихідним кодом: Кілька SCM . Але щоразу, коли репо перевіряється, попереднє репо (та пов'язані з ним проекти) видаляється.

Я прочитав це:

http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html

але це не дуже допомагає. Я намагався вказати одну і ту ж папку в локальному підкаталозі для repo (необов'язково) для всіх репост, але це дає однаковий результат.

Якщо це неможливо за допомогою Дженкінса, я думаю, якийсь крок / сценарій перед складанням може бути використаний для переміщення проектів у потрібне місце. Це не можливість змінювати конфігурацію збірки проектів.

Відповіді:


69

Перевірка декількох репо одночасно в одному робочому просторі неможлива за допомогою плагіна Jenkins + Git.

Як вирішення, ви можете або мати кілька завдань, що надходять за течією, які перевіряють по одному репосту, а потім копіюють у остаточну робочу область проекту (проблематично на декількох рівнях), або ви можете встановити крок сценарію оболонки, який перевіряє кожну необхідну репо робоча область роботи на час складання.

Раніше плагін Multiple SCM міг допомогти з цією проблемою, але тепер застарілий. На сторінці модуля Multiple SCM: "Користувачі повинні перейти на https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin . Трубопровід пропонує кращий спосіб перевірки декількох SCM і підтримується Jenkins. основна команда розвитку ".


Чому перший підхід є проблематичним? Розбиття робочих місць здається гарною практикою.
CurtainDog

1
Це взагалі хороша практика, але коли вам потрібно кілька замовлень в одному і тому ж фізичному місці, обслуговування викликає величезне занепокоєння. Наприклад, якщо ви хочете створити збірку філій, вам доведеться клонувати 4 завдання, а потім індивідуально змінювати шляхи для кожного з них. Звичайно, є плагіни, які допоможуть у цьому, але простіше просто перевірити на відносний шлях з одного завдання. Тоді ви можете клонувати скільки завгодно, не змінюючи налаштувань.
CIGuy

1
Вам потрібно змінити його на правильну відповідь, оскільки це вже не актуально.
Dvir669

2
Трубопроводи вимагають, щоб ви вивчили новий DSL, що трохи занадто багато для дуже простої роботи (перевірити код з кількох сховищ), який ми хочемо це зробити. Дотримуйтесь плагін Multiple SCM, поки не з’явиться гідний графічний інтерфейс навколо конвеєра DSL з трубопроводу Jenkins. Я можу повідомити, що він добре працює з Дженкінсом 2.17
Бурак Арслан

2
Я просто зіткнувся з тими ж проблемами з кількома репостами. Зараз я використовую плагін Pipeline, хоча я був настільки ж скептичний, як @BurakArslan щодо нового DSL. Це насправді не так вже й погано, як я думав, і поставляється з досить пристойним генератором фрагментів. Після його використання лише 2 години я зараз віддаю перевагу такому підходу, оскільки в кінцевому підсумку я можу виконати сценарії побудови конвеєра, щоб вони збиралися разом з рештою коду.
Бен

81

З плагіном декількох SCM:

  • створити інший запис у сховищі для кожного сховища, яке потрібно оформити (основний проект чи проект залежності).

  • для кожного проекту в меню «розширене» (у другому «розширеному» меню є дві кнопки з написом «розширений» для кожного сховища) знайдіть текстове поле «Локальний підкаталог для репо (необов’язково)». Ви можете вказати там підкаталог у каталозі "робоча область", куди потрібно скопіювати проект. Ви можете скласти карту файлової системи мого розробника.

"Другого розширеного меню" вже не існує, замість цього потрібно скористатися кнопкою "Додати" (у розділі "Додаткові поведінки") та вибрати "Перейти до підкаталогу"

  • якщо ви використовуєте мураш, як зараз файл build.xml з цілями збирання не в кореневому каталозі робочої області, а в підкаталозі, ви повинні відобразити це в конфігурації "Викликати мурашник". Для цього в "Invoke ant" натисніть "Advanced" і заповніть вхідний текст "Build file", включаючи ім'я підкаталогу, де знаходиться build.xml.

Сподіваюся, що це допомагає.


3
Це повинно бути застарілим. На момент написання декількох SCM фрагментів GIT-фрагмента GIT не містить необов'язкового під-шляху.
ОлексійOst

12
У кожному сховищі є випадаючий список під назвою "Додати". У ньому ви можете знайти опцію "Оформити замовлення на підкаталог", який виконує те саме.
Гері Єв

1
Я дотримувався вашої інструкції з кількома плагінами та git SCM, але у мене є ще одна кумедна проблема. Здається, не хоче належним чином перевіряти одну і ту ж гілку (розробку) для різних сховищ. Він намагається перевірити комісію за допомогою хеша (що діє лише в першому сховищі). Будь-яка ідея, як вирішити це?
Лефтерис

Найбільша проблема з декількома плагінами SCM полягає в наступному: "Тригери типу" пост-фіксація "наразі не працюють (принаймні, для підриву), тому необхідно налаштувати опитування типу" cron "."
граяїї

1
Трубопроводи вимагають, щоб ви вивчили новий DSL, що трохи занадто багато для дуже простої роботи (перевірити код з кількох сховищ), який ми хочемо це зробити. Дотримуйтесь плагін Multiple SCM, поки навколо DSL трубопроводу Дженкінса не з'явиться гідний графічний інтерфейс. Я можу повідомити, що він добре працює з Дженкінсом 2.17
Бурак Арслан

41

Оскільки плагін декількох SCM застарілий.

Завдяки Дженкінсу Трубопроводу можна замовити кілька репостів, а також побудувати його за допомогою граді

node {   
def gradleHome

stage('Prepare/Checkout') { // for display purposes
    git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'

    dir('a-child-repo') {
       git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
    }

    env.JAVA_HOME="${tool 'JDK8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
    gradleHome = tool '3.4.1' 
}

stage('Build') {
  // Run the gradle build
  if (isUnix()) {
     sh "'${gradleHome}/bin/gradle' clean build"
  } else {
     bat(/"${gradleHome}\bin\gradle" clean build/)
  }
}
}

Ви можете розглянути можливість використання підмодулів git замість власного конвеєра, як це.


Дякую!!! dirБлок є ключовим, я не міг зрозуміти, чому я тільки бачив самий нові клонують репо в робочому просторі мого завдання.
бон

як поняття "зміни" розглядається під декількома SCM? Чи є лише сума змін, що спостерігаються з усіх репостів, які складають робочі місця? Було б добре деталізувати їх, якщо це можливо, 23 changes from repo XXX, 3 changes from repo YYYабо щось більш компактне.
jxramos

20

Я використовував плагін декількох SCM разом із плагіном Git успішно з Дженкінсом.


3
спасибі, це чудово, я вмію помістити 2 бітбукет-контури в розділ сховища, і тепер, як я можу сказати, що Repo 1 перевіряє "розвивати" гілку, а для репо 2 замовлення "виправляє" гілку? Я бачу гілки для складання частини в jenkins, як я можу встановити ім'я сховища та Refsec у специфікаторі гілки (порожній для 'будь-якого'), щоб кожна з них могла перевірити відповідну гілку, яку я хочу? або я роблю це wront, і я повинен натиснути булеву форму, що каже "Кілька SCM"?
пелос

@pelos Ви зуміли знайти рішення?
Говінд

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

5

Залежно від зв’язків сховищ, інший підхід полягає в додаванні іншого сховища (сховищ) у вигляді підмодулів git до одного із сховищ. Підмодуль git створює посилання на інші репости. Ці ремоди підмодулю не клонуються, якщо ви не вказали --recursiveпрапор під час клонування "суперпроекту" (офіційний термін).

Ось команда додати підмодуль у поточний проект:

git submodule add <repository URI path to clone>

Ми використовуємо Jenkins v1.645, і git SCM нестандартно зробить рекурсивний клон для суперпроектів. Voila, ви отримуєте суперпроектні файли та всі залежні (підмодулі) repo-файли у своїх власних каталогах у тій же робочій області роботи Jenkins.

Не підтверджуючи, що це правильний підхід, скоріше це підхід.


5

Дженкінс: Кілька СКМ - застаріла. GIT плагін - не працює для декількох репостів.

Сценарій / конвеєр як код - це шлях.


2

У мене теж була ця проблема. Я вирішив це за допомогою тригер / побудови викликів для інших проектів. Для кожного сховища я називаю проект нижче, використовуючи параметри.

Основний проект:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None

Потім для кожного сховища я називаю наступний проект таким чином:

Trigger/call builds on other projects: 
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>

Нижній проект: Linux-Tag-Checkout:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 

1

Перевірка одночасно декількох репо в одному робочому просторі є можливим з Jenkins + Git плагін (може бути , тільки в більш пізніх версіях?).

У розділі "Управління вихідним кодом" виберіть не "Git", а "Кілька SCM" та додайте кілька сховищ git.

Будьте впевнені, що у всіх, крім однієї, ви додаєте як "Додаткова поведінка" дію "Перевірте в підкаталог" та вкажіть окремий підкаталог.


Я вірю, що таким чином ви використовуєте (застарілий) плагін декількох SCM, а не плагін Gnil для ванілі.
Роберт

0

Ми використовуємо git-repo для управління нашими кількома сховищами GIT. Існує також плагін Jenkins Repo, який дозволяє перевірити все або частину сховищ, якими керує git-repo, до тієї ж робочої області роботи Jenkins.


Як саме ви вирішуєте задачу, задану в цьому питанні? Я встановив згадуваний вами плагін і читав про репо та плагін, але я не бачу, як налаштувати Дженкінса клонувати два репости для виконання в одному проекті ...
GreenAsJade

Для використання Repo необхідно створити спеціальний сховище, яке буде містити лише файли (файли) маніфесту. У цьому файлі ви вказуєте всю інформацію про інші сховища. Точний формат файлів маніфестів описаний у файлі docs / manifest-format.txt проекту git-repo ( gerrit.googlesource.com/git-repo/+/master/docs/… ). Конфігуруючи частину завдання Jenkins Repo - ви вказуєте розташування сховища 'manifest' і, необов'язково, назву файлів 'manifest' (їх може бути декілька). Усі сховища, зазначені в маніфесті, будуть клоновані.
vladisld
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.