Jenkins GitHub插件扫描组织触发器

时间:2019-07-17 14:07:35

标签: jenkins github

在Jenkins GitHub(v1.28.0)插件组织的Configuration页面上,有一个部分可以设置Jenkins定期扫描该组织。我不希望Jenkins定期建立PR或分支机构,因此已关闭此选项。

scan organization trigger

但是,这并没有更改组织内存储库上的选项。在存储库中,有一个View Configuration选项,该选项仍会显示出来。

repository configuration

我可以在此处取消选中该选项,但是没有没有保存按钮,并且View Configuration的确听起来像是只读的。即使我从Jenkins配置中删除了存储库,然后重新添加它,它仍然会显示选中的框。

如何阻止Jenkins在这些存储库上自动运行构建?

2 个答案:

答案 0 :(得分:1)

您可以做的是保留组织本身的触发器,并禁用“子级扫描触发器”。因此,您最终会遇到这样的事情。

Organization Scan enabled

但是,如果您取消选中“如果不运行则定期运行”,则您的子触发器(存储库本身)将被禁用。

Child Trigger Disabled

这应该防止自动触发组织回购。但是,此解决方案不是防弹的。如果您的Jenkins重新启动,则存储库触发器将执行并执行分支索引编制,而分支索引又将触发构建。

答案 1 :(得分:0)

虽然在UI中无法执行此操作,但是您可以使用Groovy脚本来执行此操作。

// Update the PeriodicFolderTrigger of each job inside of a Cloudbees folder.
// Useful for updating individual repos as you cannot do this through the UI.
// Adapted from https://github.com/cloudbees/jenkins-scripts/blob/6eb3bfe58b2c87081966b77f91b0be06da7daad3/setOrgFolderIndex.groovy
import com.cloudbees.hudson.plugins.folder.computed.PeriodicFolderTrigger
import jenkins.model.Jenkins
import jenkins.branch.OrganizationFolder

println "Multibranch Items\n-------"
Jenkins.instance.getAllItems(org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject.class).each { it.triggers
       .findAll { k,v -> v instanceof com.cloudbees.hudson.plugins.folder.computed.PeriodicFolderTrigger }
       .each { k,v -> setInterval(it) }                                                                                               
}

def setInterval(folder) {
  println "[INFO] : Updating ${folder.name}... " 
  folder.getTriggers().find {triggerEntry ->
    def key = triggerEntry.key
    if (key instanceof PeriodicFolderTrigger.DescriptorImpl){
      println "[INFO] : Current interval : " + triggerEntry.value.getInterval()
      // Valid intervals are here:
      // https://github.com/jenkinsci/cloudbees-folder-plugin/blob/master/src/main/java/com/cloudbees/hudson/plugins/folder/computed/PeriodicFolderTrigger.java#L261-L278
      def newInterval = new PeriodicFolderTrigger("28d")
      folder.addTrigger(newInterval)
      folder.save()
      println "[INFO] : New interval : " + newInterval.getInterval()
    }
  }
}