Jenkins и Git разреженные проверки

У меня есть большой репозиторий в Git. Как мне создать задание в Jenkins, которое проверяет только одну подпапку из проекта?


person Pavel Chuchuva    schedule 28.05.2012    source источник
comment
Действительно ли необходимо добавлять эту сложность? Как только репозиторий будет клонирован в первый раз, git будет просто извлекать новые объекты. Если на вашем сервере jenkins не хватает места для хранения, я бы просто клонировал все это и избегал каких-либо дополнительных сложностей.   -  person wadesworld    schedule 29.05.2012
comment
Да, потому что в среде CI/CD ваши ведомые устройства или серверы Jenkins приходят и уходят по требованию и загружаются... поэтому постоянного диска там нет. Надежность на постоянство ценится меньше, чем на повторяемость во многих кругах DevOps.   -  person cgseller    schedule 07.06.2018


Ответы (3)


Плагин Jenkins Git поддерживает разреженные проверки, так как git -плагин 2.1.0 (апрель 2014 г.). Для этой функции вам понадобится git >= 1.7.0. Он находится в разделе «Дополнительные действия» -> «Разреженные пути оформления».

скриншот

См. выпуск Jira JENKINS-21809.

person uı6ʎɹnɯ ꞁəıuɐp    schedule 18.07.2014
comment
К сожалению, Git все равно придется копировать весь репозиторий локально. Таким образом, вы можете не заметить каких-либо улучшений скорости Git для получения файлов с сервера. - person luka5z; 30.08.2016
comment
К сожалению, он по-прежнему проверяет его с неповрежденной исходной структурой пути, поэтому на самом деле он не проверяет один каталог, а просто заполняет только один каталог, FWIW - person rogerdpack; 16.09.2016
comment
Довольно и старый, но как мы определяем имена подкаталогов с пробелом. Я хочу проверить папку/в/включить/каталог с пробелом.. - person OK999; 07.03.2017
comment
Если A является корневым каталогом и выполняется парсинг в подкаталог B, то разреженный путь извлечения: /B/ для каталога B. @ OK999: Попробуйте использовать обратную косую черту \ перед пробелом или любым специальным символом в имени файла или папки. Пример: /Path/To/My Folder будет похоже на /Path/To/My\ Folder или попробуйте указать путь между кавычками /Path/To/My Folder. - person bh4r4th; 18.07.2018
comment
@ luka5z Этот ответ необходимо сочетать с неглубоким клоном глубины 1, который также поддерживает Дженкинс. - person Johan Boulé; 26.07.2018
comment
При использовании неглубокого клонирования список «последних изменений», отображаемый в задании Дженкинса, может стать неточным и ввести в заблуждение. - person Ed Randall; 18.07.2019

Вы можете использовать функцию Git разреженного извлечения. Обратите внимание, что Git по-прежнему клонирует весь репозиторий на локальный диск. Однако это не так уж плохо, потому что он сжат.

  1. Создайте новую работу в Jenkins, установите репозиторий Git в разделе «Управление исходным кодом».
  2. Создайте проект. Это клонирует весь репозиторий на локальный диск.
  3. Откройте папку рабочей области проектов, удалите там все, кроме папки .git.
  4. Откройте оболочку Git для папки рабочей области проекта. Включить разреженную проверку:

    git config core.sparsecheckout true
    
  5. Обновление рабочего дерева:

    git read-tree -mu HEAD
    
  6. Создайте файл sparse-checkout в папке .git/info. Добавьте путь к подпапке, которую вы хотите извлечь из этого файла, например так (обратите внимание на косую черту):

    folder/to/include/
    
  7. Снова создайте проект. На этот раз в папке рабочей области должна появиться только одна подпапка.

person Pavel Chuchuva    schedule 28.05.2012
comment
@RuudLenders Да, вам нужно делать это для каждого задания, которое вы хотите проверить только в одной подпапке. - person Pavel Chuchuva; 26.06.2013
comment
Разве шаг 5 «git read-tree -mu HEAD» не должен следовать за шагом 6? Насколько я могу судить, вы должны сначала указать Git, какие файлы он должен просматривать (шаг 6), а затем прочитать информацию о дереве в индексе. - person borisdiakur; 22.01.2014

У вас может быть собственный шаг, который просто использует

git checkout your-branch -- the/desired/path anthother/desired/path

Чтобы очистить его, вы можете просто rm -rf рабочую папку и воссоздать ее с помощью mkdir workingdir. Это потребует от вас указать эту опцию на уровне git приведенной выше команды:

git --working-dir="/path/to/workingdir" checkout your-branch -- the/desired/path anthother/desired/path

Все зависит от того, насколько хорошо вы знаете Дженкинса.

person Adam Dymitruk    schedule 29.05.2012
comment
Проблема в том, что Jenkins обычно использует плагин для получения исходного кода, а плагин Git не позволяет вам изменить команду для проверки. - person Pavel Chuchuva; 29.05.2012
comment
Я предполагаю, что написание или изменение существующего плагина было бы слишком большой проблемой. - person Adam Dymitruk; 29.05.2012