我想通过Job DSL生成基于管道插件的作业,Job DSL包含在Jenkins检出的git存储库中。
但是,我认为将管道脚本作为Job DSL脚本中的引用字符串并不是很好。所以我想把它们读成一个字符串并将其传递给script()
函数:
definition {
cps {
sandbox()
script( new File('Pipeline.groovy').text )
}
}
}
我必须在哪里放Pipeline.groovy
才能使用此功能?我尝试将它放在我的DSL脚本旁边,也放在DSL源的resources/
文件夹中。但詹金斯总是抛出一个未找到的文件"。
答案 0 :(得分:0)
你试过readFileFromWorkspace()
吗?它应该能够找到你从git中签出的文件。
答案 1 :(得分:0)
参考Job DSL pipelineJob:https://jenkinsci.github.io/job-dsl-plugin/#path/pipelineJob,并在http://job-dsl.herokuapp.com/上删除它以查看生成的配置。
下面的Job DSL创建了一个管道作业,它从Jenkins文件中提取实际作业:
pipelineJob('DSL_Pipeline') {
def repo = 'https://github.com/path/to/your/repo.git'
triggers {
scm('H/5 * * * *')
}
description("Pipeline for $repo")
definition {
cpsScm {
scm {
git {
remote { url(repo) }
branches('master', '**/feature*')
scriptPath('misc/Jenkinsfile.v2')
extensions { } // required as otherwise it may try to tag the repo, which you may not want
}
// the single line below also works, but it
// only covers the 'master' branch and may not give you
// enough control.
// git(repo, 'master', { node -> node / 'extensions' << '' } )
}
}
}
}
您/您的Jenkins管理员可能希望将Jenkins作业创建与实际作业定义分开。这对我来说似乎是明智的......集中脚本来在一个Jenkins DSL仓库中创建Jenkins作业并不是一个坏主意。