我开始创建我的管道多分支环境,但我发现了一个问题。
我是否可以仅使用Jenkins文件检测分支,但没有管道执行?
我的项目有不同的分支,我不希望当我从父管道multibranch启动构建扫描所有子管道foreach分支与Jenkinsfile开始执行。
感谢您的帮助!
答案 0 :(得分:23)
在分支来源部分,您可以添加名为抑制自动SCM触发的属性。
这可以防止Jenkins使用Jenkinsfile
构建所有内容。
答案 1 :(得分:2)
此外,您可以通过编程方式完成
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()
}
答案 2 :(得分:2)
要添加到@Stqs的答案,您还可以使用Job DSL插件设置noTriggerBranchProperty
,例如:
multibranchPipelineJob('example') {
...
branchSources {
branchSource {
...
strategy {
defaultBranchPropertyStrategy {
props {
// Suppresses the normal SCM commit trigger coming from branch indexing
noTriggerBranchProperty()
...
}
}
}
}
}
...
}
答案 3 :(得分:2)
如果您正在使用job-dsl,则只需执行此操作,它将扫描所有内容,而无需在首次索引时实际运行构建。
organizationFolder('Some folder name') {
buildStrategies {
skipInitialBuildOnFirstBranchIndexing()
}
}
答案 4 :(得分:1)
organizationFolder('my-folder') {
buildStrategies {
buildRegularBranches()
buildChangeRequests {
ignoreTargetOnlyChanges true
ignoreUntrustedChanges false
}
}
}
注意:插件 basic-branch-build-strategies
是必需的
参考:
答案 5 :(得分:1)
经过一番努力,我找到了这个解决方案,它应该只在分支索引时避免触发构建,而不是在提交后禁用自动构建。只需在项目的第一阶段添加它:
when {
not {
expression {
def causes = currentBuild.getBuildCauses()
String causesClass = causes._class
return causesClass.contains('BranchIndexingCause')
}
}
}