Передача переменных между файлами Groovy

9

Я управляю многими работами в Jenkins с помощью плагина DSL. Этот плагин использует определения .groovy, поэтому я думаю, что даже если кто-то не использует Jenkins, но использование groovy может помочь.

Как правило, я хочу создать дополнительный файл, который может быть Groovy, JSON или YAML, что угодно. Важна возможность подключения этого файла к моему файлу .groovy.

В этом файле я определяю переменные (а не просто строки), например, IP-адрес или другие вещи, например.

ip_gitlab: 1.2.3.4
default_user: admin

В моих отличных файлах я хочу использовать эти переменные.

Такой подход возможен в заводной?

rafal1337
источник
конечно это возможно. Например, есть groovy-lang.org/json.html .
пахнет
Если возможно определить дополнительный путь к классу в плагине DSL. затем поместите в папку, которую вы добавите в classpath groovy file (s) как class GLOBAL{ def a=111; def b=222; }. тогда в коде вы сможете получить к нему доступGLOBAL.a
daggett
@daggett Я пытался, как вы написали, и всегда у меня появляется ошибка: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.runtime.InvokerHelper$1@641eff69' with class 'org.codehaus.groovy.runtime.InvokerHelper$1' to class 'javaposse.jobdsl.dsl.JobParent' эта ошибка возникает при обработке вашего класса GLOBAL
rafal1337
я забыл для каждой определенной переменной должен быть staticпрефикс. class GLOBAL{ static def a=111; static def b=222; }, но ошибка у вас странная. Не могли бы вы показать объявленную вами переменную и то, как вы ее используете в dsl.
Даггетт
1. Моя конфигурация dsl postimg.cc/TLHK5k6h 2. Ошибка при обработке dsl postimg.cc/21F37jDs
rafal1337

Ответы:

3

Я предлагаю использовать файл свойств, как писал @JBaruch

ip_gitlab=1.2.3.4
default_user=admin

И загрузить его

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

Тогда вы можете использовать его, например, получить IP:

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"
user7294900
источник
2
Это минимально приписанная копия из другого поста; по крайней мере, вы хотите следовать рекомендациям по ссылкам и назвать автора.
Мартин Питерс
Unfornetly, который не работает в Jenkins DSL, не может найти файл со свойствами, но этот файл находится в той же папке ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337
@ rafal1337 Вы пытались использовать частичный / полный путь к файлу?
user7294900
@ user7294900 Да, я пробовал несколько путей, но без положительного эффекта.
rafal1337
@ rafal1337 попробуйте readFile jenkins.io/doc/pipeline/steps/workflow-basic-steps
user7294900
2

Сделайте groovy файл и определите некоторую общую информацию и использование load.

Например, hello.conf (написанный groovy)

build_name = 'hello'

build_config = [
    'git': 'your git repository',
    'build_job': ['bulid_a', 'build_b']
]

И использовать его load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}
Чан Ли
источник
выглядит хорошо, но в DSL плагин в Jenkins не работает:ERROR: (pipeline.groovy, line 1) No signature of method: pipeline.load() is applicable for argument types: (java.lang.String) values: [a_test.groovy]Possible solutions: job(java.lang.String), find(), folder(java.lang.String), job(java.lang.String, groovy.lang.Closure), find(groovy.lang.Closure), wait()
rafal1337
2

если вы хотите получить конкретный ответ от Jenkins: для jenkins есть плагин поставщика файла конфигурации.

Вы можете хранить файлы конфигурации / свойств через управляемые файлы. Перейдите в Управление Jenkins> Управляемые файлы и создайте новый файл. Поддерживаются .groovy, .json, .xml и многие другие.

Получив этот файл, вы можете загрузить указанный файл в задание, используя флажок «Предоставить файл конфигурации», который автоматически загрузит файл в переменную env.

Каус Untwale
источник