在一个普通的自由式项目中,我将SCM插件配置为指向我要发布的Git仓库,并启用"Poll SCM"选项,这允许我配置Stash webhook,以便在发生更改时告诉Jenkins那个回购.通过这种方式,只要将更改推送到仓库,就可以触发作业.
但是当我使用工作流而不是自由式项目时,我需要构建的代码的SCM在groovy工作流脚本中以编程方式指定,这意味着它不是在监听Stash webhook.相反,直接在工作流中配置的SCM是groovy脚本本身的SCM,它与我尝试构建/发布的代码库不同,因此我不希望触发器基于此.
node('docker_builder') {
git url: serviceRepo
releaseVersion = getVersion()
pipelineSpec = getPipelineSpec()
sh "./gradlew clean build pushDockerImage"
}
Run Code Online (Sandbox Code Playgroud)
有关如何在使用工作流插件时实现SCM轮询的任何想法?
gbu*_*ton 33
我通过大量的研究和实验解决了这个问题.这个文档使我走上正轨:https://github.com/jenkinsci/workflow-scm-step-plugin/blob/master/README.md.它说:
跨多个SCM支持轮询(一个或多个中的更改将触发新构建),并且再次根据工作流的最后构建中使用的SCM完成.
这意味着Jenkins工作流仍然支持SCM轮询,但与普通的自由式项目不同,您必须在开始侦听SCM更改之前手动运行它一次.这是有道理的,因为SCM是在Groovy代码中定义的; 直到他们跑了一次才知道他们.
其中一个棘手的问题是您可以在工作流程中定义许多SCM.例如,我有三个:一个用于服务本身,一个部署脚本和Groovy工作流DSL.默认情况下,对这三个SCM中的任何一个进行更改都会导致"SCM poll"选项触发构建,这可能是不可取的.幸运的是,在Groovy代码中的"git"步骤上设置"poll:false"选项将禁用该repo上的轮询.如果您正在从SCM读取Groovy DSL,则可以通过单击Jenkins UI中的"其他行为"并添加"不要在提交通知上触发构建"来禁用对该repo的轮询.
另一个棘手的问题是Stash web hook插件默认包含RESTful URL中提交的SHA1哈希代码,它会触及Jenkins.不幸的是,当Jenkins尝试拉出你可能定义的多个SCM中的任何一个时,错误地使用相同的提交代码.哈希码当然只与一个SCM相关,因此它会中断.你可以通过在Stash web hook插件中设置"Omit SHA1 Hash Code"来解决这个问题.然后Jenkins将使用你在每个SCM中构建的任何分支上的最新提交.
| 归档时间: |
|
| 查看次数: |
12721 次 |
| 最近记录: |