Jenkins multibranch管道扫描无需执行

时间:2017-05-16 14:43:22

标签: jenkins jenkins-pipeline multibranch-pipeline

我开始创建我的管道多分支环境,但我发现了一个问题。

我是否可以仅使用Jenkins文件检测分支,但没有管道执行?

我的项目有不同的分支,我不希望当我从父管道multibranch启动构建扫描所有子管道foreach分支与Jenkinsfile开始执行。

感谢您的帮助!

6 个答案:

答案 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')
        }
    }
}