Начальное задание повторяется бесконечно каждую минуту из-за изменения «job_template»

Я использую плагин jenkins-job-dsl. Создал начальное задание для запуска файла myJobs.jenkins_jobs, внутри которого я написал задание job_template и другое задание, using 'job_template'. Однако после создания seed job он продолжает собираться снова и снова, пока я его не отключу.

В https://jenkinsci.github.io/job-dsl-plugin/#path/job-using понятно

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

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

Мой файл myJobs.jenkins_jobs выглядит так:

job('job_template'){
}

job('railgun-db-importer-DSL') {
    using 'job_template'
}

РЕШЕНИЕ

Ошибка заключалась в том, что задание шаблона имело поле «описание», которое обновлялось с датой после каждого запуска — это приводило к тому, что оно менялось при каждом запуске и запускалось снова при каждом запуске. Поместив отдельное «описание» в каждое задание и жестко закодировав описание задания шаблона, чтобы оно не менялось при запуске, я избавился от бесконечных запусков.


person kujaw    schedule 18.04.2019    source источник


Ответы (1)


Вы не должны поддерживать шаблонные задания с помощью job-dsl.

Идея шаблонного задания заключается в том, что вы можете создавать новые задания с помощью job-dsl на основе существующего задания, которое не поддерживается job-dsl (это задание-шаблон).

Как правило, вы хотите сделать это, если есть какая-то сложная конфигурация подключаемого модуля, которую трудно реализовать напрямую в job-dsl — в таких случаях может быть проще создать задание-шаблон вручную и использовать это как основа для дальнейшей настройки через job-dsl.

В вашем примере каждый запуск DSL будет касаться задания шаблона; поскольку модификации задания шаблона снова вызовут DSL, это может привести к бесконечному циклу, который вы наблюдаете.

person Alex O    schedule 25.04.2019
comment
Я использую шаблонное задание в DSL для хранения кода, который повторяется во всех других заданиях, чтобы избежать одинаковых строк кода в каждом задании. У меня сложилось впечатление, что шаблонная работа предназначена для того, чтобы в некоторой степени рефакторить код в скрипте DSL. В противном случае, если у меня есть шаблон задания, созданный вручную, а остальные задания созданы DSL, я не вижу смысла использовать DSL, потому что мне все равно придется пойти и посмотреть шаблон задания на Jenkins. Если у меня есть задание-шаблон в DSL, я могу быстро проверить, что в нем содержится. - person kujaw; 30.04.2019
comment
Шаблонные задания предназначены не для этого. Для структурирования кода DSL вы можете использовать все функции и методы абстракции, предоставляемые языком Groovy. Создание шаблонных заданий в сценарии DSL и их повторное использование в других заданиях, созданных с помощью того же сценария, не только сбивает с толку, но и может привести к возникновению условий гонки. Я бы не рекомендовал этого делать. - person Alex O; 30.04.2019