Docker 如何使用Jenkins管道插件启用SCM轮询

Docker 如何使用Jenkins管道插件启用SCM轮询,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,这是一个与之相关的问题。该线程回答在启用SCM轮询后如何在管道脚本中使用SCM轮询,但不包括如何启用SCM轮询 properties([pipelineTriggers([pollSCM('H * * * *')])]) 例如,如果您想使用来使用Jenkins文件自动创建作业,我知道没有一种方法可以在作业中启用“轮询SCM”选项。这使得按需提供环境变得困难,例如创建一个从一开始就设置了作业的docker容器。因为一旦容器启动,您必须登录到Jenkins并转到配置并选择“轮询SCM”选项。Clo

这是一个与之相关的问题。该线程回答在启用SCM轮询后如何在管道脚本中使用SCM轮询,但不包括如何启用SCM轮询

properties([pipelineTriggers([pollSCM('H * * * *')])])
例如,如果您想使用来使用Jenkins文件自动创建作业,我知道没有一种方法可以在作业中启用“轮询SCM”选项。这使得按需提供环境变得困难,例如创建一个从一开始就设置了作业的docker容器。因为一旦容器启动,您必须登录到Jenkins并转到配置并选择“轮询SCM”选项。Cloudbees提供了一个解决这个问题的方法


然而,这是不可用的詹金斯使用免费版本。Jenkins免费版的用户有什么解决方法吗?

我也在考虑同样的问题

如果您使用的是像
Github
Bitbucket
这样的在线Git服务,我认为您可以使用他们的
Webhooks
功能来解决这个问题。我还没能测试这个解决方案,但它应该能工作

多分支管道
配置中,启用
远程触发生成
选项

然后,您需要使用路径(如Jenkins配置描述中所述)在存储库上启用Github/Bitbucket Webhook:
Jenkins\u URL/job/test/build?token=token\u NAME

如果您想使用多分支管道插件使用Jenkins文件自动创建作业,我知道没有一种方法可以在作业中启用“轮询SCM”选项


也没有任何必要。多分支项目对整个分支索引有一个可配置的轮询间隔,它还充当每个分支的构建触发器,并且还将自动接收Webhook。

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

使用管道语法生成器和“属性:设置作业属性”,可以生成以下命令,以启用SCM轮询

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

然而,正如Jesse Glick指出的,对于多分支管道,您不需要启用SCM轮询。

为了让我的Bitbucket连接到web挂钩,我必须在声明性管道中添加以下内容:

properties([pipelineTriggers([pollSCM('H * * * *')])])
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项目/Github团队多分支项目时,这一点尤其重要。一旦你有几个回购/分支机构,扫描可能需要几分钟

通过直接钩住分支,您可以更快地获得构建结果,并且没有任何副作用


注意:在声明性管道中,属性调用必须由脚本块包装。

还有一个
自动注册webhooks
选项,该选项应自动为您生成Webhook,但我无法获得此工作。我可以从GitHub设置webhooks,它确实触发构建,不幸的是,我需要能够更新repo中存储的版本号,这会导致无限外观,并且webhook触发器不尊重GitSCM中指定的“excludedregion”。关于如何从触发构建中排除某些更改的任何建议?对于Bitbucket,您是对的。我的设置的工作方式是一个顶级多分支作业,它每10分钟在Bitbucket中使用“定期运行(如果没有运行)”轮询一个项目。在该项目下的任何回购协议中,将为每个分支机构创建一个作业,其中包含一个Jenkins文件。还值得一提的是,自动创建的分支作业将在Build Triggers下的设置“Periodically if not reuters run”选项默认为1天。它似乎不起任何作用,并且您无法保存对作业的更改,因此无法对其进行修改。在组织文件夹中的只读多分支项目上的定期触发器可确保分支索引至少在该存储库上以该时间间隔运行(如果没有其他时间间隔)。组织文件夹上的定期触发器仅适用于存储库扫描,例如查找要添加的新存储库。目前,多分支项目级别的触发器无法配置为组织文件夹级别的选项。我是否需要在根项目上设置“如果不运行,则定期运行”才能正常工作?这似乎只会导致我的项目每10分钟(或间隔时间是多少)构建一次。它还会忽略GitSCM中excludedRegions的任何设置。@JesseGlick,你是说对于org文件夹中的只读项目,“如果不运行,则定期运行”是在1天内硬编码的,因此不能更改吗?考虑到Webhook对于VPN/intranet中的Jenkins实例不是一个很好的选择,它们是如何比每天更频繁地构建的?间隔轮询和SCM轮询之间的内部区别是什么?第一个轮询不是资源密集型的吗?5秒的间隔会对Jenkins的表现产生负面影响吗?这是正确的答案,使用pollSCM(“”)只启用作业触发。