【问题标题】:Why does Hudson sync to the next to last changelist with the Perforce plugin?为什么 Hudson 使用 Perforce 插件同步到倒数第二个变更列表?
【发布时间】:2023-11-28 10:53:01
【问题描述】:

我们正在使用 Hudson (1.398) 和 Perforce 插件 (1.1.14) 来运行持续集成。每次使用 Perforce 触发器进行签入时都会启动构建,该触发器调用:

  wget "http://username:password@hudsonserver:8080/job/hudson_projname_test/buildWithParameters?token=SECRETTOKEN&CHANGENUM=315311&SUBMITTER=username"

Hudson cosole 看起来像这样:

Started by remote host 169.169.69.69
Using master perforce client: projname_a0_username_hudson
[hudson] $ /eda/perforce_2010.1/x86_64/bin/p4 workspace -o projname_a0_username_hudson
Last sync'd change: 315267
[hudson] $ /eda/perforce_2010.1/x86_64/bin/p4 counter change
[hudson] $ /eda/perforce_2010.1/x86_64/bin/p4 -s changes //projname_a0_username_hudson/...@315268,@315311
Sync'ing workspace to changelist 315267.
[hudson] $ /eda/perforce_2010.1/x86_64/bin/p4 sync //projname_a0_username_hudson/...@315267
Sync complete, took 3956 ms
[hudson] $ /bin/sh -xe /tmp/hudson30156.sh
+ p4 sync @315311
+ runsim

问题是 Hudson 似乎没有同步到最后一个更改列表,而是同步到倒数第二个更改列表,因此我必须“手动”与通过参数传入的更改列表同步。但是这个 Hudson 的 b/c 在通知提交者他们可能已经破坏了构建时使用了错误的更改列表。

有没有其他人注意到 Hudson/Perforce 的这种行为,如果有,您是如何解决的?

【问题讨论】:

    标签: hudson perforce sync


    【解决方案1】:

    签入触发器在实际提交更改之前执行(因此触发器可以在必要时阻止它)。因此,可能发生的情况是构建正在启动并获取最新的可用更改,其中不包括当前提交的更改。

    您可能想要做的是编写一个签入触发脚本,该脚本将分叉到后台,并在调用 wget 之前等待 10-20 秒左右。

    【讨论】: