Ответ 1
Еще нет, есть Feature Feature, охватывающий этот вид сборки, но он все еще открыт: Проблема 673
Мы используем Jenkins для выполнения инкрементных построений нашего проекта при каждой фиксации в SCM. Мы хотели бы получить отдельные сборки для каждого отдельного коммита. Тем не менее, наивный подход (настройка SCM и использование пост-фиксации для запуска сборки) обнаруживает проблему в следующем сценарии:
Это "состояние гонки" усложняет поиск того, кто из коммитов нарушил встроенные предупреждения.
В настоящее время используемое решение проверяет изменения в одном задании ( "задание планировщика" ) и запускает другое задание для выполнения фактической проверки и сборки.
Существуют ли какие-либо правильные решения этой проблемы?
Еще нет, есть Feature Feature, охватывающий этот вид сборки, но он все еще открыт: Проблема 673
Возможно, он пропустил эту точку, но у нас есть довольно хороший процесс сборки.
Короче говоря, идеальный день разработчика такой
никакой разработчик 2 не присоединяется к стороне и не пытается выполнить некоторую работу
процесс точно такой же, как и начинающий, в нем есть ветки. Разработчик 1 быстрее, и его изменения объединены в ветку разработки. Теперь, прежде чем разработчик 2 сможет опубликовать свои изменения, он должен переустановить свои изменения поверх изменений, внесенных разработчиком 1.
Итак, мы уверены, что процесс сборки запускается для каждого изменения, внесенного в нашу базу кода.
Мы используем это для нашей разработки С# - на окнах не на linux
Я думаю, что может помочь установить тихое время (Jenkins > Manage Jenkins > Configure System) на 0
и опрос SCM на очень короткое время. Но даже в течение этого короткого промежутка могут быть две фиксации. На данный момент Jenkins не имеет возможности разбивать сборку на отдельные сборки на несколько транзакций SVN.
Вот учебник по этой теме: Тихая функция периода.
Я не верю, что то, что вы хотели бы сделать, возможно. "Тихий период", упомянутый Даниэлем Кутиком, фактически используется, чтобы рассказать Хадсону/Дженкинсу, сколько времени ждать, чтобы разрешить другие коммиты в том же проекте. Значение - если вы установите это значение на 60 секунд, и вы совершили фиксацию, он будет ждать минуту, прежде чем начать новую сборку, что позволит также забрать другие фиксации (в течение одной минуты).
Если вы используете правило "" NO COMMIT "на сломанной сборке" и доведите его до логического завершения, вы на самом деле оказываетесь в "Никакой фиксации на сломанной сборке или в процессе сборки", и в этом случае проблема, которую вы описываете, уходит.
Позвольте мне объяснить. Если у вас есть два разработчика, работающие над одним и тем же проектом, и оба они пытаются совершить (или нажать, если вы используете DVCS). Один из них преуспеет, а другие будут терпеть неудачу и должны обновляться до фиксации.
Разработчик, который должен был выполнить обновление, знает из истории фиксации, что другой фиксатор был последним и, следовательно, продолжает работу (даже если он еще не прошел проверку). Они не знают, разрушена ли эта сборка, но единственный безопасный вариант - подождать и посмотреть.
Единственное, что остановило бы вас от использования вышеприведенного подхода, - это то, что сборка занимает очень много времени, и в этом случае вы можете обнаружить, что ваши разработчики никогда не получат возможность совершить (она всегда строится). Затем это драйвер для разбивки вашей сборки в конвейер с несколькими шагами, так что задание Post Commit занимает не более 5 минут, но идеально подходит 1 минута.
Как отметил кто-то из Issue 673, вы можете попробовать запустить параметризованную сборку с параметром, являющимся фактическим фиксатором git, который вы хотите строить. Это в сочетании с фиксацией фиксации VCS.