我正在使用Jenkins Perforce插件,並輪詢工作空間以進行更改,然後在捕獲的更改列表上運行構建。Jenkins Perforce插件 - 單個輪詢中的多個更改列表
的問題:如果有夾在同一調查多個變更表,構建只是在最後變更列表(而不是對所有的變更列表中)
P4_CHANGELIST包含最後變更列表運行。
如何在每個捕獲的更改列表上運行構建?
我正在使用Jenkins Perforce插件,並輪詢工作空間以進行更改,然後在捕獲的更改列表上運行構建。Jenkins Perforce插件 - 單個輪詢中的多個更改列表
的問題:如果有夾在同一調查多個變更表,構建只是在最後變更列表(而不是對所有的變更列表中)
P4_CHANGELIST包含最後變更列表運行。
如何在每個捕獲的更改列表上運行構建?
至於爲每個更改列表運行構建,這是一個功能請求尚未採取行動(首先在This Question回答)。
具體的更改列表信息位於作業的元數據中。我不確定你可以在構建階段獲得它,但你肯定可以在之後看到它。 Summary of Changes
部分僅顯示自上次構建以來的更改列表。
在每個作業的builds
目錄中,有一個changelog.xml
文件,其中包含每個單獨的「更改日誌條目」的條目,在Perforce的情況下它是更改列表。每個entry
的changenumber
元素表示來自perforce的更改列表編號。
最後,如果你想颳了到詹金斯服務器的自動化進程外部的信息,您可以通過檢索檢索上次生成XML數據:
http://{sereveraddress}/job/{jobname}/lastSuccessfulBuild/api/xml
將返回包含XML結構changeSet
item
的列表,其中每個都有changeNumber
(以及msg
和每個affectedPath
)。這些數據也可以在json中找到。
更正確的實現方法是參數化您的作業以運行特定的變更集,然後在您的perforce服務器中編寫一個post-commit觸發器,用於遠程啓動Jenkins作業,可以使用CLI或通過簡單如捲髮。這具有在構建每個變更集時的優勢,而不是在輪詢間隔發生時分批進行。
如前所述,Jenkins核心中尚不存在此功能。幸運的是,有一張票直接添加到Perforce插件的功能。這基本上會導致它只在運行時才構建下一個更改,並且實現相當簡單,但是每個輪詢週期只會運行一個構建。
解決方案被發現!
問題在於沒有提供多個變更列表信息的輪詢。 我使用Perforce查詢來查找自上次構建以來提交的所有查詢,而不是使用Jenkins \ Perforce插件輪詢分支。
這是我爲了解決這一問題所做的:
然後我建立每個發現的變更列表和更新LATEST_CHANGELIST_NUMBER(在文件例如)。
它工作正常! 感謝您的想法!
只要確保我明白了:您想強制爲每個單獨的更改列表單獨構建,而不是讓Jenkins將多個更改列表組合到一個單一的構建中,對嗎?大概你試圖確認每個更改列表不會導致問題? – gaige 2013-05-08 12:04:43
是的,確切地說。我想建立每個單獨的更改列表。但是如果沒有辦法做到這一點,我仍然想知道被發現的變更列表。有沒有辦法做到這一點? – 2013-05-08 12:10:43
我相信答案是「你不能」,根據[這個問題](http://stackoverflow.com/questions/6657004/enforcing-one-build-for-one-commit-in-jenkins-hudson)但是如何限制這個問題有一些建議。 – gaige 2013-05-08 12:10:51