当前位置: 首页 > 知识库问答 >
问题:

如何使用Jenkins工作流插件进行SCM轮询

闾丘成礼
2023-03-14

在一个普通的freestyle项目中,我配置了SCM插件来指向我想要发布的Git repo,并且我启用了“Poll SCM”选项,这允许我配置一个Stash webhook来告诉Jenkins何时该repo发生了变化。这样,每当将更改推送到repo时,就可以触发作业。

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

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

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

共有1个答案

端木弘方
2023-03-14

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

跨多个SCMs支持轮询(一个或多个中的更改将触发新的构建),并且再次根据工作流的上一个构建中使用的SCMs来完成。"

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

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

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

 类似资料:
  • 问题内容: 随着我越来越多地将Groovy与Jenkins Workflow插件配合使用,我开始意识到可以在多个脚本中使用的可重用代码。 共享此代码的最佳方法是什么?是否可以使用共享代码生成我自己的.jar并在Workflow脚本中利用它?还是有更简单的方法? 问题答案: 我实际上通过使用我们自己的git repo最终完成了这项工作,但在工作流库/ src中放置了一个符号链接以指向该repo。

  • 问题内容: 我正在尝试制作一个Jenkins插件。您如何从插件获取工作信息?我知道 但是,我不知道如何调用此方法。 问题答案: 我编写了以下常规脚本,以从工作中获取所有内部版本号。 该工作詹金斯API可以给你额外的手柄,以获取有关作业的信息

  • 我试图在Jenkins构建中为.NET项目获得FxCop分析(调用独立的SonarQube分析)。 配置如下所示: Sonarqube 5.1.2 C#4.2 声纳-转轮2.4 Jenkins:SonarQube插件2.2.1 有没有什么方法可以让FxCop使用Jenkins插件和sonar-runner工作而不设置sonar.cs.FxCop.Assembly属性?

  • 我试图设置jenkins-kubernetes插件创建Jenkins动态奴隶。 我的詹金斯在K8s集群外运行。 链接:https://github.com/jenkinsci/kubernetes-plugin 我的jenkins版本是2.60.2和Kubernetes插件版本是1.1.2 我按照自述文件中提到的步骤成功地建立了连接。 Kubernetes没有豆荚开始。这很奇怪。 我不确定我做错了

  • 问题内容: 我正在使用Jenkins 1.596,Workflow 1.3和Svn插件2.5。我正在尝试在工作流程脚本中获取svn修订版号。 我的工作流脚本部分为: 在这里,您会看到两次尝试:第一个尝试打印“ java.io.IOException:无法运行程序“ svn”:error = 2,没有这样的文件或目录”,第二个提示“没有找到名为Svn的工具”(我也尝试了“颠覆”)。尝试打印“空”。

  • 我试图在Jenkins管道中使用JenkinsArtiFactory Plugin-Release Management功能,但我在文档中没有看到任何管道步骤(https://www.jfrog.com/confluence/display/RTF/Declarative管道语法)。 我正在寻找管道步骤,无论是脚本化/声明性步骤"阶段Maven发布构建"。PFA的截图,可以通过正常的maven工作