2013-05-08 42 views
3

我正在使用Jenkins Perforce插件,並輪詢工作空間以進行更改,然後在捕獲的更改列表上運行構建。Jenkins Perforce插件 - 單個輪詢中的多個更改列表

的問題:如果有夾在同一調查多個變更表,構建只是在最後變更列表(而不是對所有的變更列表中)

P4_CHANGELIST包含最後變更列表運行。

如何在每個捕獲的更改列表上運行構建?

+0

只要確保我明白了:您想強制爲每個單獨的更改列表單獨構建,而不是讓Jenkins將多個更改列表組合到一個單一的構建中,對嗎?大概你試圖確認每個更改列表不會導致問題? – gaige 2013-05-08 12:04:43

+0

是的,確切地說。我想建立每個單獨的更改列表。但是如果沒有辦法做到這一點,我仍然想知道被發現的變更列表。有沒有辦法做到這一點? – 2013-05-08 12:10:43

+0

我相信答案是「你不能」,根據[這個問題](http://stackoverflow.com/questions/6657004/enforcing-one-build-for-one-commit-in-jenkins-hudson)但是如何限制這個問題有一些建議。 – gaige 2013-05-08 12:10:51

回答

2

至於爲每個更改列表運行構建,這是一個功能請求尚未採取行動(首先在This Question回答)。

具體的更改列表信息位於作業的元數據中。我不確定你可以在構建階段獲得它,但你肯定可以在之後看到它。 Summary of Changes部分僅顯示自上次構建以來的更改列表。

在每個作業的builds目錄中,有一個changelog.xml文件,其中包含每個單獨的「更改日誌條目」的條目,在Perforce的情況下它是更改列表。每個entrychangenumber元素表示來自perforce的更改列表編號。

最後,如果你想颳了到詹金斯服務器的自動化進程外部的信息,您可以通過檢索檢索上次生成XML數據:

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

將返回包含XML結構changeSetitem的列表,其中每個都有changeNumber(以及msg和每個affectedPath)。這些數據也可以在json中找到。

2

更正確的實現方法是參數化您的作業以運行特定的變更集,然後在您的perforce服務器中編寫一個post-commit觸發器,用於遠程啓動Jenkins作業,可以使用CLI或通過簡單如捲髮。這具有在構建每個變更集時的優勢,而不是在輪詢間隔發生時分批進行。

如前所述,Jenkins核心中尚不存在此功能。幸運的是,有一張票直接添加到Perforce插件的功能。這基本上會導致它只在運行時才構建下一個更改,並且實現相當簡單,但是每個輪詢週期只會運行一個構建。

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

0

解決方案被發現!

問題在於沒有提供多個變更列表信息的輪詢。 我使用Perforce查詢來查找自上次構建以來提交的所有查詢,而不是使用Jenkins \ Perforce插件輪詢分支。

這是我爲了解決這一問題所做的:

  1. 我創建了一個獨立的工作,以建立一個變更由它的一個數字。
  2. 我創建了一個工作,查找自上次更改列表構建(保存在文件或註冊表中的param LATEST_CHANGELIST_NUMBER)後提交的所有更改列表。 爲了做到這一點我用Perforce的查詢: P4變化「//projects/BRANCH_NAME/[email protected]>LATEST_CHANGELIST_NUMBER」

然後我建立每個發現的變更列表和更新LATEST_CHANGELIST_NUMBER(在文件例如)。

它工作正常! 感謝您的想法!

相關問題