是否可以扫描多分支管道以检测带有 a 的分支Jenkinsfile
,但不执行管道?
我的项目有不同的分支,当我从父管道多分支启动构建扫描时,我不希望所有带有 Jenkinsfile 的子管道分支开始执行。
是否可以扫描多分支管道以检测带有 a 的分支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 片段,它会进行扫描,但不会为所有发现的分支启动新的“构建”。
如果您使用的是 job-dsl,您可以简单地执行此操作,它会扫描所有内容,而无需在您第一次索引时实际运行构建。
organizationFolder('Some folder name') {
buildStrategies {
skipInitialBuildOnFirstBranchIndexing()
}
}
要添加到@Stqs 的答案,您还noTriggerBranchProperty
可以使用 Job DSL 插件进行设置,例如:
multibranchPipelineJob('example') {
...
branchSources {
branchSource {
...
strategy {
defaultBranchPropertyStrategy {
props {
// Suppresses the normal SCM commit trigger coming from branch indexing
noTriggerBranchProperty()
...
}
}
}
}
}
...
}
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')
}
}
}