Jenkins Perforce插件 - 单个民意调查中的多个更改列表

时间:2013-05-08 07:47:22

标签: jenkins perforce jenkins-plugins

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

问题:如果在同一轮询中有多个更改列表,则构建仅在最后一个更改列表上运行(而不是在所有更改列表上)

P4_CHANGELIST包含最后一个更改列表。

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

4 个答案:

答案 0 :(得分:2)

至于为每个更改列表运行构建,这是一个尚未采取行动的功能请求(首先在This Question中回答)。

特定更改列表信息位于作业的元数据中。我不确定你可以在构建阶段进入它,但你可以在之后看到它。 Summary of Changes部分仅显示自上次构建以来的更改列表。

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

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

entry

将返回一个XML结构,其中包含http://{sereveraddress}/job/{jobname}/lastSuccessfulBuild/api/xml changeSetitem列表,其中每个changeNumber都包含msg(以及affectedPath和每个{{1}} })。这些数据也可以在json中找到。

答案 1 :(得分:2)

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

如前所述,Jenkins核心中尚不存在此功能。幸运的是,有一个票据可以直接添加到Perforce插件中。这实际上会导致它只在运行时构建下一个更改,并且实现起来应该相当简单,但是它的缺点是每个轮询周期只运行一个构建。

https://issues.jenkins-ci.org/browse/JENKINS-17889

答案 2 :(得分:0)

发现了解决方案!

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

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

  1. 我创建了一个独立的工作来构建一个变更列表,它是一个数字。
  2. 我创建了一个作业,找到自上次更改列表构建以来提交的所有更改列表(保存在文件或注册表中的param LATEST_CHANGELIST_NUMBER)。 为此,我使用了Perforce查询: p4更改“// projects / BRANCH_NAME /...@& gt; LATEST_CHANGELIST_NUMBER”
  3. 然后我构建每个找到的更改列表并更新LATEST_CHANGELIST_NUMBER(例如在文件中)。

    工作正常! 谢谢你的想法!

答案 3 :(得分:0)

Polling Per Change

选中该版本将对每个版本进行1次更改,如果未选中则将取消静默期开始以来的所有更改。