#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 и их повторное использование в других заданиях, созданных тем же скриптом, не только сбивает с толку, но и зависит от условий гонки. Я бы не рекомендовал этого делать.