gpt4 book ai didi

jenkins-workflow - 如何使用 Jenkins Workflow 插件使 SCM 轮询工作

转载 作者:行者123 更新时间:2023-12-03 13:24:26 26 4
gpt4 key购买 nike

在一个普通的自由式项目中,我将 SCM 插件配置为指向我想要发布的 Git 存储库,并启用“Poll SCM”选项,它允许我配置一个 Stash webhook 以在发生更改时告诉 Jenkins到那个 repo 。这样,只要将更改推送到存储库,就可以触发作业。

但是当我使用工作流而不是自由式项目时,我需要构建的代码的 SCM 在 groovy 工作流脚本中以编程方式指定,这意味着它没有监听 Stash webhook。相反,直接在工作流中配置的 SCM 是 groovy 脚本本身的 SCM,它与我尝试构建/发布的代码库不同,因此我不希望触发器基于此。

node('docker_builder') {
git url: serviceRepo
releaseVersion = getVersion()
pipelineSpec = getPipelineSpec()
sh "./gradlew clean build pushDockerImage"
}

关于在使用工作流插件时如何实现 SCM 轮询的任何想法?

最佳答案

我已经通过大量的研究和实验解决了这个问题。这份文档让我走上了正轨:https://github.com/jenkinsci/workflow-scm-step-plugin/blob/master/README.md .它说:

Polling is supported across multiple SCMs (changes in one or more will trigger a new build), and again is done according to the SCMs used in the last build of the workflow."



这意味着 Jenkins 工作流仍然支持 SCM 轮询,但与普通的自由式项目不同,您必须手动运行一次,然后它才能开始监听 SCM 更改。这是有道理的,因为 SCM 是在 Groovy 代码中定义的;直到他们运行一次,他们才知道。

其中一个棘手的元素是您可以在工作流程中定义许多 SCM。例如,我有三个:一个用于服务本身、一个部署脚本和 Groovy 工作流 DSL。默认情况下,对这三个 SCM 中的任何一个的更改都会导致“SCM poll”选项触发构建,这可能是不可取的。幸运的是,在 Groovy 代码中的“git”步骤中设置“poll: false”选项将禁用对该 repo 的轮询。如果您正在从 SCM 读取 Groovy DSL,则可以通过单击 Jenkins UI 中的“其他行为”并添加“不要在提交通知上触发构建”来禁用对该存储库的轮询。

另一个棘手的元素是 Stash web hook 插件默认情况下在 Jenkins 使用的 RESTful URL 中包含提交的 SHA1 哈希码。不幸的是,当 Jenkins 尝试提取您可能定义的多个 SCM 中的任何一个时,它犯了使用相同提交代码的错误。哈希码当然只与一个 SCM 相关,因此它会中断。您可以通过在 Stash web hook 插件中设置“省略 SHA1 哈希码”来解决此问题。然后 Jenkins 将只使用您在每个 SCM 中构建的任何分支上的最新提交。

关于jenkins-workflow - 如何使用 Jenkins Workflow 插件使 SCM 轮询工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com