如何使用Jenkins Pipeline插件启用SCM轮询

23
这是一道与Jenkins Workflow插件如何使SCM轮询工作的相关的问题。该讨论解答了在启用SCM轮询后,如何在管道脚本中使用SCM轮询,但没有涵盖如何启用 SCM轮询的内容。
例如,如果您想要使用多分支管道插件自动创建使用Jenkinsfile的任务,则我不知道是否有一种方法可以在任务中启用“轮询SCM”选项。这使得难以提供按需环境,例如创建一个从开始就设置好任务的docker容器。因为你必须登录Jenkins并转到配置页面,并在容器启动后选择“轮询SCM”选项。Cloudbees提供模板插件来帮助解决这个问题。
然而,这对于使用免费版本的Jenkins的用户不可用。是否有任何解决方法或解决方案?
4个回答

26
如果你想使用多分支管道插件通过Jenkinsfile自动创建作业,我不知道有没有办法让作业启用“轮询SCM”选项。但是,这也不是必要的,因为多分支项目可以配置整个分支索引的轮询间隔,该间隔同时还可用作每个分支的构建触发器,并将自动接收webhook通知。

1
你是对的。我的设置方式是使用Bitbucket中的“定期运行”每10分钟轮询项目的顶级多分支作业。为该项目下每个具有Jenkinsfile的仓库创建一个分支作业。值得一提的是,自动创建的分支作业将在构建触发器下默认设置“定期运行”,选项为1天。它似乎没有任何作用,您无法保存作业更改,因此无法修改。 - mdo123
1
只读多分支项目内的定期触发器确保在该存储库上运行分支索引,至少在该间隔内,如果没有其他情况。组织文件夹中的定期触发器仅适用于存储库扫描,例如查找要添加的新存储库。目前,多分支项目级别的触发器不能作为组织文件夹级别的选项进行配置。 - Jesse Glick
我需要在根项目上设置“如果没有其他运行周期”才能使其工作吗?似乎这只会导致我的项目每10分钟(或任何间隔)构建一次。它还会忽略GitSCM中排除区域的任何设置。 - Woland
2
@JesseGlick,您是在说“定期而非其他运行”在org文件夹内的只读项目中硬编码为1天,因此无法更改吗?鉴于Webhook不适用于VPN / Intranet内部的Jenkins实例,如何使其比每天更频繁地构建? - mrooney
间隔轮询和SCM轮询在内部的区别是什么 - 第一个不是更消耗资源吗?5秒的轮询间隔会对Jenkins性能产生负面影响吗? - NicolasW
这在使用 SVN 外部引用时无法正常工作,当一个外部引用发生更改但顶级仓库没有更改时。有任何想法为什么? - mgouin

23

要回答如何启用SCM轮询的问题,您需要执行以下操作。

使用Pipeline语法生成器和“属性:设置作业属性”,您可以生成以下内容,这将启用SCM轮询。

properties([pipelineTriggers([pollSCM('H * * * *')])])

然而,正如Jesse Glick指出的那样,对于多分支流水线,您不需要启用SCM轮询。


3
这是正确答案,使用pollSCM('')仅能触发作业。 - ruckc
这个轮询是否检测Jenkinsfile的更改?那么它只会在Jenkinsfile更改时运行作业吗? - Rijo Simon

3
我正在思考同样的问题。 如果您使用像Github或Bitbucket这样的在线Git服务,我认为您可以使用它们的Webhooks功能来解决此问题。我还没有能够测试该解决方案,但是它应该有效。 在您的Multibranch Pipeline配置中,启用Trigger builds remotely选项。 然后,您需要在您的存储库上启用Github/Bitbucket Webhook,使用路径(如Jenkins配置说明中所述):JENKINS_URL/job/test/build?token=TOKEN_NAME

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - tvdw
我可以从GitHub设置Webhooks并触发构建,但不幸的是,我需要能够更新存储在仓库中的版本号,这会导致无限循环,并且Webhook触发器不尊重GitSCM指定的“excludedRegions”。有没有关于如何排除某些更改以防止触发构建的建议? - Woland
针对 Bitbucket - https://support.cloudbees.com/hc/en-us/articles/226568007-Triggering-a-build-using-hooks-in-Bitbucket-server - mdo123

3
为了让我的Bitbucket连接到Web Hook,我必须在我的声明性流水线中添加以下内容:
pipeline {
    stages {
        stage('Initialize') {
            steps {
                //enable remote triggers
                script {
                    properties([pipelineTriggers([pollSCM('')])])
                }
                //define scm connection for polling
                git branch: BRANCH_NAME, credentialsId: 'my-credentials', url: 'ssh://git@stash.server.fqdn/stash/my-project.git'
            }
        }
    }
}

这样可以重新构建一个分支,而不必扫描整个多分支宇宙。当使用Bitbucket Project/Github Team-多分支项目时,这是非常有价值的。一旦你拥有了几个仓库/分支,扫描可能需要几分钟。

通过直接连接到分支,您可以更快地获取构建结果,而且没有任何副作用。

注意:在声明性管道中,属性调用必须被script-block包装。


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