#groovy #jenkins-pipeline #include #jenkins-groovy #preprocessor
Вопрос:
У меня есть куча заданий в одном представлении, которые используют одну и ту же декларативную структуру конвейера, за исключением следующей части:
parameters { string(name: 'total_try_count', defaultValue: '1', description: '總的嘗試次數') choice(name: 'intermediate_dir', choices: '/var/lib/jenkins-slave/', description: '在放入 NAS 前保存視頻和字幕的目錄') booleanParam(name: 'unplanned_download', defaultValue: false, description: '臨時起意的下載?') ... ... choice(name: 're_pattern', choices: '', description: '正則表達式待匹配模式') booleanParam(name: 're_remove_spaces', defaultValue: true, description: '刪除文件名中的空格?') string(name: 're_new_pattern_prefix', defaultValue: '', description: '正則表達式新模式前綴') }
Можно ли сохранить параметры в текстовом файле, а затем включить их в конвейер, как в #include
директиве C/C
?
Комментарии:
1. Должен ли я использовать какой-то код, например
def external = load('external_parameters.groovy') properties(external.options())
, и поместить это в начало в качестве нового этапа «параметры загрузки»?2. Вы хотите, чтобы параметры вводились пользователями или брались из файла конфигурации? или, может быть, и то, и другое?
3. @NoamHelmer В файлах
Ответ №1:
Мой Файл Дженкинса:
#!/usr/bin/env groovy import hudson.model.* import hudson.EnvVars node('whatever') { checkout scm def options = load 'script.groovy' properties([parameters(options.params())]) println "${params.TEST_PARAM}" }
Мой внешний файл groovy, скрипт.groovy:
def params() { [ string(defaultValue: 'default', description: '', name: 'TEST_PARAM', trim: true) ] } return this
выход:
[Pipeline] load [Pipeline] { (script.groovy) [Pipeline] } [Pipeline] // load [Pipeline] properties [Pipeline] echo default [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
Комментарии:
1. Хорошая работа. Скриптовые конвейеры действительно более гибки, чем декларативные.
2. @StevenLiang То же самое можно сделать и в декларативном конвейере. На самом деле это вопрос предпочтений. Декларативность легко понять и многим нашим пользователям, не являющимся разработчиками. Сценарий, так сказать, больше подходит для опытных пользователей
3. После опробования как скриптовых, так и декларативных конвейеров кажется, что должен быть процесс «инициализации параметров». т. е. кнопка «Построить» становится «Построить с параметрами». Каждый раз, когда добавляются новые параметры, если таковые имеются, в файле сценария мы должны снять флажок «Этот проект параметризован» и сохранить задание, а затем повторно инициализировать параметры задания, нажав кнопку «Построить». Это должно быть неизбежно, по крайней мере на данный момент.