Как мне сказать Jenkins / Hudson запускать сборку только для изменений в конкретном проекте в моем дереве Git?
87
В подключаемом модуле Git есть опция (исключенная область) для использования регулярных выражений, чтобы определить, пропускать ли построение на основе того, соответствуют ли файлы в фиксации регулярному выражению исключенной области.
К сожалению, стандартный плагин Git в настоящее время не имеет функции «включенного региона» (1.15). Однако кто-то разместил на GitHub патчи, которые работают с Jenkins и Hudson и реализуют нужную вам функцию.
Это небольшая работа для создания, но она работает так, как рекламируется, и была чрезвычайно полезна, поскольку в одном из моих деревьев Git есть несколько независимых проектов.
https://github.com/jenkinsci/git-plugin/pull/49
Обновление: плагин Git (1.16) теперь имеет функцию «включенного» региона.
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. Есть подсказка? Подробнее здесь: stackoverflow.com/questions/47439042/…По сути, вам нужно две работы. Один для проверки, изменились ли файлы, и один для выполнения фактической сборки:
Работа №1
Это должно срабатывать при изменениях в вашем репозитории Git. Затем он проверяет, есть ли изменения в указанном вами пути (здесь "src"), а затем использует CLI Jenkins для запуска второго задания.
Работа # 2
Сконфигурируйте это задание, чтобы оно принимало параметр GIT_REVISION таким образом, чтобы убедиться, что вы создаете именно ту ревизию, которую выбрало первое задание.
источник
$? || exit 0
...test $? -eq 0 || exit 0
может быть?Если вы используете декларативный синтаксис Jenkinsfile для описания конвейера сборки, вы можете использовать условие набора изменений, чтобы ограничить выполнение стадии только тем случаем, когда были изменены определенные файлы. Теперь это стандартная функция Jenkins и не требует дополнительной настройки / программного обеспечения.
Вы можете комбинировать несколько условий, используя ключевые слова
anyOf
илиallOf
для поведения ИЛИ или И соответственно:источник
Хотя это не влияет на отдельные задания, вы можете использовать этот сценарий, чтобы игнорировать определенные шаги, если последняя фиксация не содержала никаких изменений:
источник
api/
папку). Если вы можете это исправить, мне бы понравилось предлагаемое изменение !Если логика выбора файлов нетривиальна, я бы запускал выполнение скрипта при каждом изменении, а затем писал скрипт, чтобы проверить, действительно ли требуется сборка, а затем запускать сборку, если это так.
источник
Для этого вы можете использовать плагин Generic Webhook Trigger .
С такой переменной, как
changed_files
и выражение$.commits[*].['modified','added','removed'][*]
.Вы можете иметь текст фильтра, например,
$changed_files
и фильтровать регулярное выражение, например,"folder/subfolder/[^"]+?"
еслиfolder/subfolder
это папка, которая должна запускать сборки.источник
Я ответил на этот вопрос в другом посте:
Как получить список файлов, измененных с момента последней сборки в Jenkins / Hudson
Вы можете добавить проверку непосредственно в верхнюю часть оболочки exec задания, и она будет,
exit 0
если никаких изменений не обнаружено ... Следовательно, вы всегда можете опросить верхний уровень для проверки, чтобы запустить сборку.источник
Я написал этот скрипт, чтобы пропустить или выполнить тесты, если есть изменения:
Итак, вы можете сделать что-то вроде:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
источник