我们正在使用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的这种行为,如果是这样,你是如何解决它的?
答案 0 :(得分:4)
在实际提交更改之前执行签入触发器(因此触发器可以在必要时阻止它)。所以可能发生的是构建正在启动并获取最新的可用更改,其中不包括当前提交的更改。
你可能想要做的是编写一个checkin触发器脚本,它将分叉到后台,并在调用wget之前等待10-20秒左右。