我该如何在我的Jenkinsfile中配置“扫描多分支流水线触发器”?

18

目前我手动配置所有的多分支流水线作业,并将“扫描多分支流水线触发器”设置为3分钟。

我该如何在我的Jenkinsfile中添加这个设置?我找不到相关示例。 "Scan Multibranch Pipeline Triggers" 是否可以在 triggers{} 块中使用?

3个回答

20

多分支配置页面上的设置仅配置多分支扫描作业本身,而不是在多分支“文件夹”中创建的个别作业。

“扫描多分支管道触发器”下的选项,“如果没有运行其他”,只是多分支作业扫描新分支的触发器。如果找到现有分支的更改,或者发现符合您的分支规格的Jenkinsfile的新分支,则会触发新构建,但这不应该是触发作业的方式。

实际上,您可以通过向SCM配置添加属性“禁用自动SCM触发”来禁用在发现更改时自动构建。然后,您将看到多分支扫描触发器,但作业本身不会构建,即使发现了更改也是如此。

要触发作业,最好使用Webhook。如果使用git插件(而不是github插件)使用git钩子,则需要启用PollSCM触发器(尽管您可以将其设置为仅偶尔轮询,或根本不轮询)。

如果您只想要常规的触发选项,则从2.22开始,可以配置cronpollSCM触发器。

pipeline {
    triggers {
        cron('H/4 * * * 1-5')
        pollSCM('0 0 * * 0')
    }

我相信您可以配置Webhooks以在需要扫描时通知您的多分支作业。我没有尝试过这样做。我只是告诉它使用“定期执行,如果没有其他运行”选项每小时或每天几次进行扫描。

请注意,对于您在多分支作业中配置的构建丢弃器和其他内容也适用同样的情况。在Web界面中,您只能配置多分支作业本身,而不能配置从中创建的单个作业。您必须使用Pipeline来配置这些作业。


1
管道计划任务触发器是否会构建每个分支?还是只是扫描?是否可以设置计划任务仅触发一个分支(主分支)? - darrickc
2
正确的属性名称是禁止自动 SCM 触发 - Antonio Petricca
1
是否可以通过API触发分支重新索引?我有一个GitHub WebHook指向Lambda(Lambda过滤GitHub事件,只有在收到特定评论时才触发Jenkins)。但是,由于GitHub WebHook没有直接指向Jenkins服务器,因此Jenkins不会重新索引。在PR分支被发现之前,Lambda无法触发构建。当我尝试通过Lambda将“pull_request”事件的POST请求转发到Jenkins时,我会收到“签名不正确”的错误。有什么解决办法吗? - Chaitanya Bapat
@Rob Hales - 如果创建了新分支并且它与分支名称的过滤器(或分支名称正则表达式)匹配,那么构建作业是否会被触发? 我已经设置了新配置 - 在此之后我的新分支没有被触发。之后我重新保存了配置(我认为这与索引有关),然后我的新分支的构建被触发了。之后每个新分支的作业都会被触发,这很好。但是为什么一开始没有触发呢?谢谢 - vel

7
如果您正在使用JobDSL Jenkins插件创建作业,那么您可以添加以下行来配置“扫描多分支管道触发器”:
configure {
    it / 'triggers' << 'com.cloudbees.hudson.plugins.folder.computed.PeriodicFolderTrigger'{
        spec '* * * * *'
        interval "60000"
    }
}

1
那是JobDSL还是Jenkinsfile DSL? - Ed Randall
它是JobDSL Groovy。 - ManishSingh
1
那个代码块的含义是什么? - v7r
"spec" 的意思是什么?UI 只有一个“间隔”设置。 - red888

3
使用JobDSL Jenkins插件来创建多分支流水线作业,可以按照以下方式配置定期文件夹触发器。在此示例中,允许的最长索引时间为七天,超过这个时间将会触发索引。
multibranchPipelineJob('my-awesome-job') {
    triggers {
        periodicFolderTrigger {
            interval("7d")
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接