我正在使用Jenkins Perforce插件,并轮询工作区以进行更改,然后在捕获的更改列表上运行构建。
问题:如果在同一轮询中有多个更改列表,则构建仅在最后一个更改列表上运行(而不是在所有更改列表上)
P4_CHANGELIST包含最后一个更改列表。
如何在每个捕获的更改列表上运行构建?
答案 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
changeSet
个item
列表,其中每个changeNumber
都包含msg
(以及affectedPath
和每个{{1}} })。这些数据也可以在json中找到。
答案 1 :(得分:2)
更正确的实现方法是将作业参数化以在特定变更集上运行,然后在perforce服务器中编写一个提交后触发器,以便使用CLI或通过简单的方式远程启动Jenkins作业如卷曲。这具有额外的优势,即在提交时构建每个变更集,而不是在轮询间隔发生时批量生成。
如前所述,Jenkins核心中尚不存在此功能。幸运的是,有一个票据可以直接添加到Perforce插件中。这实际上会导致它只在运行时构建下一个更改,并且实现起来应该相当简单,但是它的缺点是每个轮询周期只运行一个构建。
答案 2 :(得分:0)
发现了解决方案!
问题在于没有提供多个更改列表信息的轮询。 我使用Perforce查询来查找自上次构建以来提交的所有查询,而不是使用Jenkins \ Perforce插件轮询分支。
以下是我为解决问题所做的工作:
然后我构建每个找到的更改列表并更新LATEST_CHANGELIST_NUMBER(例如在文件中)。
工作正常! 谢谢你的想法!
答案 3 :(得分:0)