Это расширение или вариант How to configure Git post commit hookКак удаленно запускать только одну сборку за раз в Дженкинсе?
У меня есть проблема в том, что я не хочу один билд за совершение. Вместо этого я хочу запускать один экземпляр сборки за раз. Пока этот единственный экземпляр работает, новые запросы могут накапливаться, но после завершения текущей сборки они должны быть объединены в одну новую сборку.
Очевидно, что запуск должен быть включен в git-ревизии, которые имеют существенное значение, обычно из одной ветви, и сборка должна всегда выполняться в версии запуска, ближайшей к HEAD (это имеет смысл?).
Итак, ради этого вопроса, предположим, что каждый нажимает на мастер, и я помещаю git hook для запуска сборки. Как сделать так, чтобы ожидающие запросы были объединены в единичные запросы вместо очередей в виде отдельных сборок?
Это поведение тривиально настраивается с помощью опроса, но я не хочу использовать опрос по множеству несвязанных причин (большое количество заданий + нужно опросить несколько репозиториев, потребляемых одним заданием).
Jenkins parameterized job that only queues one build предлагает одну из следующих возможностей: использовать «запускающее» задание, которое быстро заканчивается и запускает фактическое рабочее задание с помощью «Объединенные очереди git хэшей». Проблема с этим подходом заключается в том, что задача запуска должна проверять репо до запуска рабочего задания. Учитывая большое git-репо, это приводит к неприемлемой задержке.
Одна мысль, которая пришла мне в голову, заключается в том, что я разрешаю задания накапливаться в очереди, и всякий раз, когда выполняется задание, он полностью игнорирует git commit, запускающий запуск, и просто проверяет HEAD, а затем я запускаю небольшую систему groovy скрипт, который очищает очередь всех запросов старше времени запуска задания, тем самым оставляя любые новые запросы, которые приходили после запуска сборки, но перед запуском сценария в очереди, поэтому мы не пропускаем прогон, даже если больше новых запросов не приходит ... –
Проблема с очисткой очереди заключается в том, что до запуска нового запуска сотни новых запросов могут накапливаться, что делает историю работы слева совершенно бесполезной. –
Еще одна идея состоит в том, чтобы не запускать долгосрочное однопользовательское задание напрямую, а вместо этого запускать небольшую сложную работу системы, которая, в свою очередь, управляет очередью работы, выполняющей длительную работу. При каждом вызове он проверяет, работает ли фактическое задание, а если нет, запустите его. Если там очередь пуста, enqueue, в противном случае пустой очереди и в очереди новое задание. –