我在job-dsl.groovy中定义的作业参数会被管道中定义的那些覆盖。
我正在使用job-dsl-plugin和Jenkins管道为每个git分支生成Jenkins作业。我的代码存储在gitLab中,它们需要gitLab集成。我使用gitlab-plugin提供。问题出在' gitLabConnection'看起来它只能从Jenkins管道内部应用。
因此,如果在job-dsl中,我会这样做:
branches.each { branch ->
String safeBranchName = branch.name.replaceAll('/', '-')
if (safeBranchName ==~ "^release.*")
{
return
}
def branch_folder = "${basePath}/${safeBranchName}"
folder branch_folder
pipelineJob("$branch_folder/build") {
logRotator {
numToKeep 20
}
parameters {
stringParam("BRANCH_NAME", "${safeBranchName}", "")
stringParam("PROJECT_NAME", "${basePath}", "")
{
}
然后在我的Jenkins管道中,我会添加' gitLabConnection'
node('node_A') {
properties([
gitLabConnection('gitlab.internal')
])
stage('clean up') {
deleteDir()
}
///(...)
我必须这样做:
node('node_A') {
properties([
gitLabConnection('gitlab.internal'),
parameters([
string(name: 'BRANCH_NAME', defaultValue: BRANCH_NAME, description: ''),
string(name: 'PROJECT_NAME', defaultValue: PROJECT_NAME, description: '')
])
])
stage('clean up') {
deleteDir()
}
///(...)
这样我的BRANCH_NAME和PROJECT_NAME就不会被覆盖。 还有另一种解决方法吗? 是否可以附加' gitLabConnection(' gitlab.internal')'到Jenkins管道中的属性?
答案 0 :(得分:0)
不幸的是,似乎还没有一种方法可以做到这一点。 https://issues.jenkins-ci.org/browse/JENKINS-43758对此进行了一些讨论,我可能最终会打开一个功能请求,以允许人们“附加到属性”
答案 1 :(得分:-1)
有两种解决方法。第一个仅使用Jenkins管道代码,但是如果选择此路径,则初始作业运行很可能会失败。最初的失败将发生,因为在第一次运行作业时,管道会创建Jenkins作业参数。一旦创建了参数,作业就可以工作。
选项'1'-仅使用Jenkins管道。
在'Pipeline Syntax'/'Snippet Generator'中检查:
“此项目已参数化”。
添加您需要的参数,然后点击“生成管道脚本”。就我而言,我得到:
属性([ gitLabConnection(gitLabConnection:'my_gitlab_connection',jobCredentialId:'',useAlternativeCredential:false), [$ class:'JobRestrictionProperty'], 参数([ 字符串(默认值:“测试”,描述:“测试”,名称:“测试”,修剪:假) ]), valveJobProperty(类别:[],limitOneJobWithMatchingParams:false,maxConcurrentPerNode:0,maxConcurrentTotal:0,paramsToUseForLimit:'',油门已启用:false,油门选项:'项目') ])
选项'2'-更复杂,但功能也更强大。由于上述问题,我终于接受了。
使用Jenkins Job DSL插件-https://github.com/jenkinsci/job-dsl-plugin
Gitlab插件与此https://github.com/jenkinsci/gitlab-plugin#declarative-pipeline-jobs