Size: a a a

2021 April 14

II

Igor Ivanov in jenkins_ru
а-ля
def text = 'pipelineJob($$JOBNAME$$) ...'
def name = (readYaml "config.yml").config.name
jobDsl scriptText: text.replaceAll('$$JOBNAME$$', name)
источник

DS

Dmitry Sergeev in jenkins_ru
ну это тоже самое что я выше написал, только чуть в другом варинте.
источник

DS

Dmitry Sergeev in jenkins_ru
Это шаблонизация, мне такое не подходит. Да и дичь на самом деле
источник

II

Igor Ivanov in jenkins_ru
а можно пример, что предполагается делать с config в "идеальном мире" во втором случае?
источник

DS

Dmitry Sergeev in jenkins_ru
мне пришла еще одна идея, надо будет попробовать
источник

DS

Dmitry Sergeev in jenkins_ru
это конфиг для редактирования юзерам, которые в groovy не понимают. Списки задач, параметры, адреса репозиториев и тому подобное. Вобщем это данные. Отделяю код от данных
источник

II

Igor Ivanov in jenkins_ru
т.е. грубо говоря, чтобы в конфиге было
repos:
 main: https://foo.bar
 utils: https://top.kek

, и в dsl можно было сделать
parameters {
 string {
   name('MAIN_REPO_URL')
   defaultValue(config.repos.main)
 }
}

?
источник

DS

Dmitry Sergeev in jenkins_ru
ну да, примерно, вобщем это зависит от того, что захочу туда вынести
источник

DS

Dmitry Sergeev in jenkins_ru
Я если честно даже подумал перейти на jjb, но только его ямлы конфигурять не юзерам, а сделать обертку на jsonnet, он будет читать config.yaml и в зависимости от него генерить jjb ямлы =)
источник

DS

Dmitry Sergeev in jenkins_ru
наркоманю  по полной
источник

II

Igor Ivanov in jenkins_ru
наркомания в dsl — это весело, да) у нас там шаблонизация вида
parameters {
 // $$PIPELINE_WITH_DIFF_PARAMETERS$$
}
которая раскрывается в
parameters {
 string{ name('foo'); value('bar') }
 string{ name('top'); value('kek') }
}
, и теперь в те шаблоны хочется параметры вроде PIPELINE_WITH_DIFF_PARAMETERS(fooValue: 'barrr'), и чтобы "значения" тех шаблонов хранились не в том репозитории который jobDsl """...""" делает, а в том из которого он файл с содержимым dsl берёт...
В общем, меня разбирает любопытство 🙃
источник

II

Igor Ivanov in jenkins_ru
можно попробовать сделать пару предположений о содержимом дсл, и заварить вот такую траву:
//no def here, so the variable is visible from every part of groovy
CONFIG = // readYaml "dsl_parameters.yaml"
[
 jobname: 'my_job',
 parameter : [
   value: 123,
 ],
]

def original_dsl = // readFile "dsl.groovy"
'''pipelineJob('${CONFIG.jobname}') {
 parameters {
   string {
     name('parameter')
     value('${CONFIG.parameter.value}')
   }
 }
}
'''
println original_dsl

def quoted_dsl = ' """ ' + original_dsl + ' """ '
println quoted_dsl

def evaluated_dsl = evaluate quoted_dsl
println evaluated_dsl

jobDsl scriptText: evaluated_dsl
источник

DS

Dmitry Sergeev in jenkins_ru
не, не то, все равно интерполяция

Пришел к такому варианту в пайплайне:

def config = readYaml file: 'config.yaml'
writeJSON file: 'config.json', json: config
jobDsl targets: 'seed.groovy'

а в seed.groovy
def config = new groovy.json.JsonSlurper().parseText(readFileFromWorkspace('config.json'))
// some job dsl code
// теперь свободно можно использовать структуры из config: config.jobs.each { job -> ...
...


перегоняем ямлики в джсоны =)
источник

DS

Dmitry Sergeev in jenkins_ru
Работает
источник

DS

Dmitry Sergeev in jenkins_ru
Всем спасибо за ответы 🤗
источник

DB

Dmitry Burmistrov in jenkins_ru
Ты свой деплоер джоб пишешь что-ли? :)
источник

DB

Dmitry Burmistrov in jenkins_ru
Или тебе нужен пайплайн из ямла? https://www.jenkins.io/blog/2018/04/25/configuring-jenkins-pipeline-with-yaml-file/
источник

II

Igor Ivanov in jenkins_ru
а разве можно обойтись без этого?
источник

DS

Dmitry Sergeev in jenkins_ru
нет, мне просто нужен конфиг с небольшим количеством ручек. Держать конфиги удобней в конфигах, а код отдельно.
источник

DS

Dmitry Sergeev in jenkins_ru
описывать все поля в джобах через ямл мне не надо, то есть вариант с куче ямла в jjb не надо. Хотя и насчет этого я думал https://t.me/jenkins_ru/50428
источник