Jenkins Perforce插件-一次轮询中有多个变更列表

Jenkins Perforce插件-一次轮询中有多个变更列表,jenkins,perforce,jenkins-plugins,Jenkins,Perforce,Jenkins Plugins,我正在使用Jenkins Perforce插件,轮询工作区中的更改,然后在捕获的更改列表上运行构建 问题:如果在同一轮询中捕获了多个变更列表,则生成只在最后一个变更列表上运行(而不是在所有变更列表上运行) P4_变更列表包含最后一个变更列表 如何在每个捕获的变更列表上运行构建?至于为每个变更列表运行构建,这是一个尚未执行的功能请求(首先在中回答) 特定变更列表信息位于作业的元数据中。我不确定你是否能在构建阶段看到它,但你肯定能在构建之后看到它。更改摘要部分仅显示自上次生成以来的更改列表 在每个作

我正在使用Jenkins Perforce插件,轮询工作区中的更改,然后在捕获的更改列表上运行构建

问题:如果在同一轮询中捕获了多个变更列表,则生成只在最后一个变更列表上运行(而不是在所有变更列表上运行)

P4_变更列表包含最后一个变更列表


如何在每个捕获的变更列表上运行构建?

至于为每个变更列表运行构建,这是一个尚未执行的功能请求(首先在中回答)

特定变更列表信息位于作业的元数据中。我不确定你是否能在构建阶段看到它,但你肯定能在构建之后看到它。更改摘要部分仅显示自上次生成以来的更改列表

在每个作业的
builds
目录中,有一个
changelog.xml
文件,其中包含每个“changelog条目”的条目,在Perforce的情况下,它是一个变更列表。每个
条目
changenumber
元素表示perforce中的变更列表编号

最后,如果要为Jenkins服务器外部的自动化流程获取信息,可以通过检索以下内容检索上一次构建的XML数据:

http://{sereveraddress}/job/{jobname}/lastSuccessfulBuild/api/xml

它将返回一个XML结构,其中包含
变更集
项列表,每个项中都有
变更号
(以及
消息
和每个
影响路径
)。这些数据也可以在json中获得。

实现这一点更正确的方法是参数化作业以在特定变更集上运行,然后在perforce服务器中编写一个提交后触发器,使用CLI或通过简单的curl远程启动Jenkins作业。这还有一个额外的优点,即在提交更改集时构建每个更改集,而不是在轮询间隔出现时成批构建

如前所述,Jenkins core中还不存在此功能。幸运的是,将此功能直接添加到Perforce插件中还有一张罚单。这本质上会导致它在运行时只生成下一个更改,而且实现起来应该相当简单,但缺点是每个轮询周期只运行一个生成

找到了解决方案

问题在于轮询没有提供多个变更列表信息。 我没有使用Jenkins\Perforce插件轮询分支,而是使用Perforce查询查找自上次构建以来提交的所有查询

以下是我为解决问题所做的:

  • 我已经创建了一个独立的作业,通过它的编号来构建变更列表
  • 我创建了一个作业,用于查找自上次生成变更列表以来提交的所有变更列表(保存在文件或注册表中的参数last_changelist_编号)。 为此,我使用了Perforce查询: p4变更“//projects/BRANCH_NAME/…@>最新变更清单编号”
  • 然后,我构建每个找到的变更列表,并更新最新的变更列表编号(例如在文件中)

    很好用! 谢谢你的想法


    选中此项后,每个生成将进行1次更改,未选中此项后,您将获得自静默期开始以来的所有更改。

    请确保我理解:您希望为每个单独的更改列表强制执行单独的生成,而不是让Jenkins将多个更改列表分组到单个生成中,对吗?想必你是想确认每个变更列表都不会引起问题?是的,没错。我想建立每个单独的变更列表。但是如果没有一个可行的方法,我仍然想知道捕获的变更列表的列表。有什么方法可以做到这一点吗?我相信答案是“你不能”,基于,但是有一些关于如何限制问题的建议。谢谢链接。它说,“到目前为止,Jenkins还没有在多个SVN提交时将构建拆分为单个构建的功能。”。但,有并没有一种方法可以得到一次民意调查的变更列表?我有一个相反的问题,在最新的jenkins上,我不能让构建一次拉取所有的变更并构建它们。我一个构建20分钟,每小时提交5次,但它对我不起作用。