Jenkins — запускать параметризованную сборку в другом проекте

Как я могу запустить параметризованную сборку только в том случае, если родительский объект завершился успешно И в нем были изменения (изменения, переданные в scm)?

Вот сценарий: у меня есть 3 сборки: A, B и C. B будет собрана, если она вызывается A или в ней есть изменения. C должен быть построен только в том случае, если B завершен успешно и если B был построен из-за изменений scm, а НЕ потому, что он был запущен A

Спасибо


person kazerm    schedule 17.07.2015    source источник


Ответы (1)


Добавьте к А:

Действия после сборки Запуск параметризованной сборки в других проектах:

  • Проекты, которые нужно построить: B
  • Срабатывает, когда сборка: Завершена (срабатывает всегда)
  • Добавить параметры Предопределенные параметры: A_HAS_BEEN_BUILT=YES

Добавьте к Б:

Метаданные [✔] Эта сборка параметризована Добавить параметр Строковый параметр:

  • Имя: A_HAS_BEEN_BUILT
  • Значение по умолчанию: NO

Действия после сборки Запуск параметризованной сборки в других проектах:

  • Проектов, которые нужно построить: C
  • Триггер, когда сборка: Стабильная [все равно по умолчанию]
  • Добавить параметры Предопределенные параметры: A_HAS_BEEN_BUILT=${A_HAS_BEEN_BUILT}

Добавить в С:

Метаданные [✔] Эта сборка параметризована_ Добавить параметр Строковый параметр:

  • Имя: A_HAS_BEEN_BUILT
  • Значение по умолчанию: NO

Сборка Добавить шаг сборки Условный шаг (одиночный):

  • Бежать?: Нет
  • !: Regular expression match
    • Expression: ^YES$
    • Метка: ${ENV,var="A_HAS_BEEN_BUILT"}
  • Строитель: ... в соответствии с вашими потребностями...


См. раздел параметризованная сборка, Плагин параметризованного триггера и Запустить подключаемый модуль условия.

ОБНОВЛЕНИЕ 1

Приведенные выше настройки вызывают следующее:

  1. A строит B строит B работает стабильно C запускается, но не строит
  2. B опрашивает SCM Изменения SCM B строит B стабильно C строит

Согласно обсуждению предполагается следующее:

  1. А строит Б строит
  2. B опрашивает SCM Изменения SCM B строит B стабильно C строит

ОБНОВЛЕНИЕ 2

Чтобы предотвратить запуск C в 1.:

  • Создайте восходящий проект для B, который опрашивает SCM и запускает B

  • Настройте следующее в B:

    Управление исходным кодом ◉ Нет

    Создать триггеры

    • [   ] Poll SCM


    Сборка Добавить шаг сборки Условный шаг (одиночный):

    • Run?: Execute shell / Execute Windows batch command
      • Command: ... SCM checkout commands; set exit status / ERRORLEVEL greater than 0 in case of no SCM changes ...
    • Builder: Trigger/call builds on other projects
      • Build Triggers
        • Projects to build: C
person Gerold Broser    schedule 18.07.2015
comment
Спасибо за ваш подробный ответ. Да, это сработает, но я искал решение, которое вообще не запускает сборку "C"... - person kazerm; 20.07.2015
comment
@kazerm Почему вы написали, что C должен быть собран ... тогда? - person Gerold Broser; 20.07.2015
comment
C должен собираться только в случае успешного завершения B - я хочу запустить новую сборку C, но только если в B были изменения. если изменений не было - я не хочу, чтобы C запускался, а затем останавливался - я хочу это вообще не начинать - person kazerm; 21.07.2015
comment
@kazerm Затем прервите B, если нет изменений, и C в этом случае никогда не запустится. - person Gerold Broser; 22.07.2015
comment
Извините, наверное, я плохо объяснил. Я всегда хочу билд B, даже если в нем не было изменений (но его выкинул билд A). Я просто не всегда хочу собирать C . если B был вызван A - не собирайте C, если B был выкинут push на github, сборка C - person kazerm; 22.07.2015
comment
@kazerm Последний абзац моего обновления соответствует тому, что вы хотите? - person Gerold Broser; 22.07.2015
comment
да, это так: A строит → B строит B опрашивает SCM → SCM изменяет → B строит → B стабильно → C строит - person kazerm; 23.07.2015