Jenkins 多分支管道扫描而不执行
Jenkins multibranch pipeline Scan without execution
是否可以扫描多分支管道以检测具有 Jenkinsfile
的分支,但不执行管道?
我的项目有不同的分支,当我从父管道多分支启动构建扫描时,我不希望所有带有 Jenkinsfile 的子管道分支开始执行。
在您的 Branch Sources 部分中,您可以添加一个名为 属性 的 Suppress automatic SCM triggering。
这会阻止 Jenkins 使用 Jenkinsfile
.
构建所有内容
此外,您可以通过编程方式完成
import jenkins.branch.*
import jenkins.model.Jenkins
for (f in Jenkins.instance.getAllItems(jenkins.branch.MultiBranchProject.class)) {
if (f.parent instanceof jenkins.branch.OrganizationFolder) {
continue;
}
for (s in f.sources) {
def prop = new jenkins.branch.NoTriggerBranchProperty();
def propList = [prop] as jenkins.branch.BranchProperty[];
def strategy = new jenkins.branch.DefaultBranchPropertyStrategy(propList);
s.setStrategy(strategy);
}
f.computation.run()
}
这是一个可以在 Jenkins 中执行的 Groovy 片段,它会进行扫描,但不会为所有发现的分支启动新的 "builds"。
要添加到@Stqs 的答案,您还可以使用 Job DSL 插件设置 noTriggerBranchProperty
它,例如:
multibranchPipelineJob('example') {
...
branchSources {
branchSource {
...
strategy {
defaultBranchPropertyStrategy {
props {
// Suppresses the normal SCM commit trigger coming from branch indexing
noTriggerBranchProperty()
...
}
}
}
}
}
...
}
如果您使用的是 job-dsl,您可以简单地执行此操作,它将扫描所有内容,而不会在您第一次建立索引时实际 运行 构建。
organizationFolder('Some folder name') {
buildStrategies {
skipInitialBuildOnFirstBranchIndexing()
}
}
organizationFolder('my-folder') {
buildStrategies {
buildRegularBranches()
buildChangeRequests {
ignoreTargetOnlyChanges true
ignoreUntrustedChanges false
}
}
}
注意:需要插件basic-branch-build-strategies
参考资料:
经过多次努力我找到了这个解决方案,它应该只避免在分支索引时触发构建,而不是在提交后禁用自动构建。只需在项目的第一阶段添加它:
when {
not {
expression {
def causes = currentBuild.getBuildCauses()
String causesClass = causes._class[0]
return causesClass.contains('BranchIndexingCause')
}
}
}
是否可以扫描多分支管道以检测具有 Jenkinsfile
的分支,但不执行管道?
我的项目有不同的分支,当我从父管道多分支启动构建扫描时,我不希望所有带有 Jenkinsfile 的子管道分支开始执行。
在您的 Branch Sources 部分中,您可以添加一个名为 属性 的 Suppress automatic SCM triggering。
这会阻止 Jenkins 使用 Jenkinsfile
.
此外,您可以通过编程方式完成
import jenkins.branch.*
import jenkins.model.Jenkins
for (f in Jenkins.instance.getAllItems(jenkins.branch.MultiBranchProject.class)) {
if (f.parent instanceof jenkins.branch.OrganizationFolder) {
continue;
}
for (s in f.sources) {
def prop = new jenkins.branch.NoTriggerBranchProperty();
def propList = [prop] as jenkins.branch.BranchProperty[];
def strategy = new jenkins.branch.DefaultBranchPropertyStrategy(propList);
s.setStrategy(strategy);
}
f.computation.run()
}
这是一个可以在 Jenkins 中执行的 Groovy 片段,它会进行扫描,但不会为所有发现的分支启动新的 "builds"。
要添加到@Stqs 的答案,您还可以使用 Job DSL 插件设置 noTriggerBranchProperty
它,例如:
multibranchPipelineJob('example') {
...
branchSources {
branchSource {
...
strategy {
defaultBranchPropertyStrategy {
props {
// Suppresses the normal SCM commit trigger coming from branch indexing
noTriggerBranchProperty()
...
}
}
}
}
}
...
}
如果您使用的是 job-dsl,您可以简单地执行此操作,它将扫描所有内容,而不会在您第一次建立索引时实际 运行 构建。
organizationFolder('Some folder name') {
buildStrategies {
skipInitialBuildOnFirstBranchIndexing()
}
}
organizationFolder('my-folder') {
buildStrategies {
buildRegularBranches()
buildChangeRequests {
ignoreTargetOnlyChanges true
ignoreUntrustedChanges false
}
}
}
注意:需要插件basic-branch-build-strategies
参考资料:
经过多次努力我找到了这个解决方案,它应该只避免在分支索引时触发构建,而不是在提交后禁用自动构建。只需在项目的第一阶段添加它:
when {
not {
expression {
def causes = currentBuild.getBuildCauses()
String causesClass = causes._class[0]
return causesClass.contains('BranchIndexingCause')
}
}
}