我有一些看起来像这样的jobDsl:
multibranchPipelineJob('foo/bar') {
branchSources {
git {
remote('https://github.com/jenkinsci/job-dsl-plugin.git')
credentialsId('github-ci')
includes('JENKINS-*')
}
}
}它将生成以下xml (代码片段):
<!-- 1. foo/bar -->
<org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject>
<sources class='jenkins.branch.MultiBranchProject$BranchSourceList'>
<data>
<jenkins.branch.BranchSource>
<source class='jenkins.plugins.git.GitSCMSource'>
<id>d45cd641-7223-4b58-9de5-837c3fe584a7</id>
<remote>https://github.com/jenkinsci/job-dsl-plugin.git</remote>
<credentialsId>github-ci</credentialsId>
<includes>JENKINS-*</includes>
<excludes></excludes>
<ignoreOnPushNotifications>false</ignoreOnPushNotifications>
</source>
<strategy class='jenkins.branch.DefaultBranchPropertyStrategy'>
<properties class='empty-list'></properties>
</strategy>
</jenkins.branch.BranchSource>
</data>
<owner class='org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject' reference='../..'></owner>
</sources>
我想要做的是通过配置块将一个节点(称为traits)附加到由jobDsl multibranchJob api创建的jenkins.branch.BranchSource节点:
multibranchPipelineJob('foo/bar') {
branchSources {
git {
remote('https://github.com/jenkinsci/job-dsl-plugin.git')
credentialsId('github-ci')
includes('JENKINS-*')
}
configure {
def first = it / 'sources'(class: 'jenkins.branch.MultiBranchProject$BranchSourceList') / 'data' / 'jenkins.branch.BranchSource'
first << traits {
foo('bar')
}
}
}
}然而,根据https://job-dsl.herokuapp.com/的说法,上面的dsl会这样创建xml:
<sources class='jenkins.branch.MultiBranchProject$BranchSourceList'>
<data>
<jenkins.branch.BranchSource>
<traits>
<foo>bar</foo>
</traits>
</jenkins.branch.BranchSource>
<jenkins.branch.BranchSource>
<source class='jenkins.plugins.git.GitSCMSource'>
<id>7fd47865-fffa-4f8f-98f1-ac6de65249f7</id>
<remote>https://github.com/jenkinsci/job-dsl-plugin.git</remote>
<credentialsId>github-ci</credentialsId>
<includes>JENKINS-*</includes>
<excludes></excludes>
<ignoreOnPushNotifications>false</ignoreOnPushNotifications>
</source>
<strategy class='jenkins.branch.DefaultBranchPropertyStrategy'>
<properties class='empty-list'></properties>
</strategy>
</jenkins.branch.BranchSource>
</data>
</sources>基本上,有什么方法可以附加到通过branchSources调用创建的BranchSource节点吗?
发布于 2021-03-17 20:11:43
参加聚会有点晚了,但也有同样的问题,这让我抓狂……看起来将配置块移到管道定义的末尾会有所帮助--也可以使用正确的XPath工具。
Fred的博客文章让我找到了正确的方向。去看看吧:https://ftclausen.github.io/infra/jenkins/jenkins-jobdsl-git-traits/
管道定义
multibranchPipelineJob('foo/bar') {
branchSources {
git {
id("foobar")
remote('https://github.com/jenkinsci/job-dsl-plugin.git')
credentialsId('github-ci')
includes('JENKINS-*')
}
}
configure {
def traits = it / sources / data / 'jenkins.branch.BranchSource' / source / traits {
traits << 'jenkins.plugins.git.traits.LocalBranchTrait'{}
}
}
}产生的config.xml
<sources class='jenkins.branch.MultiBranchProject$BranchSourceList'>
<data>
<jenkins.branch.BranchSource>
<source class='jenkins.plugins.git.GitSCMSource'>
<id>foobar</id>
<remote>https://github.com/jenkinsci/job-dsl-plugin.git</remote>
<credentialsId>github-ci</credentialsId>
<includes>JENKINS-*</includes>
<excludes></excludes>
<ignoreOnPushNotifications>false</ignoreOnPushNotifications>
<traits>
<jenkins.plugins.git.traits.LocalBranchTrait></jenkins.plugins.git.traits.LocalBranchTrait>
</traits>
</source>
<strategy class='jenkins.branch.DefaultBranchPropertyStrategy'>
<properties class='empty-list'></properties>
</strategy>
</jenkins.branch.BranchSource>
</data>
<owner class='org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject' reference='../..'></owner>
</sources>发布于 2019-01-05 14:30:12
问题是在branchSources上下文中没有configure方法。因此,将调用外部上下文中的configure方法。在本例中,来自multibranchPipelineJob上下文。由于在调用configure方法时branchSources方法尚未完成,因此还没有生成分支源节点,因此配置块将创建一个新节点。
试着这样做:
multibranchPipelineJob('foo/bar') {
branchSources {
git {
remote('https://github.com/jenkinsci/job-dsl-plugin.git')
credentialsId('github-ci')
includes('JENKINS-*')
}
}
configure {
def source = it / 'sources'(class: 'jenkins.branch.MultiBranchProject$BranchSourceList') / 'data' / 'jenkins.branch.BranchSource'
source << traits {
foo('bar')
}
}
}https://stackoverflow.com/questions/53825744
复制相似问题