Возможно ли, чтобы конвейер Дженкинса (декларативный или написанный по сценарию) поддерживал предварительную обработку, такую как #include в C?

#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. После опробования как скриптовых, так и декларативных конвейеров кажется, что должен быть процесс «инициализации параметров». т. е. кнопка «Построить» становится «Построить с параметрами». Каждый раз, когда добавляются новые параметры, если таковые имеются, в файле сценария мы должны снять флажок «Этот проект параметризован» и сохранить задание, а затем повторно инициализировать параметры задания, нажав кнопку «Построить». Это должно быть неизбежно, по крайней мере на данный момент.