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

#jenkins #groovy #jenkins-job-dsl

#дженкинс #groovy #jenkins-job-dsl

Вопрос:

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

В https://jenkinsci.github.io/job-dsl-plugin/#path/job-using Я понимаю

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

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

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

 job('job_template'){
}

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

РЕШЕНИЕ

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

Ответ №1:

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

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

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

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

Комментарии:

1. Я использую задание шаблона в DSL для хранения кода, который повторялся во всех других заданиях, чтобы избежать одинаковых строк кода в каждом задании. У меня сложилось впечатление, что задание шаблона предназначено для некоторого рефакторинга кода в DSL-скрипте. В противном случае, если у меня есть шаблон задания, созданный вручную, а остальные задания созданы DSL, я не вижу смысла в использовании DSL, потому что мне все равно придется пойти и взглянуть на задание шаблона в Jenkins. Если у меня есть задание шаблона в DSL, я могу быстро проверить, что оно содержит.

2. Это не то, для чего предназначены задания шаблона. Для структурирования вашего DSL-кода вы можете использовать все функции и методы абстракции, предоставляемые языком Groovy. Создание шаблонных заданий в скрипте DSL и их повторное использование в других заданиях, созданных тем же скриптом, не только сбивает с толку, но и зависит от условий гонки. Я бы не рекомендовал этого делать.