整合項目上線時,運維大哥創建好Jenkins任務后,發現在構建BOSS開工、智能出行、整合這三個項目其中一個Jenkins任務時,會同時構建其他的Jenkins任務。
先介紹一下大背景兒:整合項目是一個新項目。整合項目是將BOSS開工、智能出行兩個業務線系統所具有的公共的業務功能整合到一起,減輕運營工作量和技術維護成本。這樣,系統間的邏輯結構變成了BOSS開工、智能出行會依賴整合系統的一部分接口,整合系統會依賴BOSS開工、智能出行的一部分接口。這些局域網系統是用dubbo實現rpc調用,所以,項目間會相互依賴彼此的接口契約jar。
如下圖,三個構建任務test_omsbase-rpcapi-module、test_bosskg-interface-module、test_car-pub-module-interface所構建的是三個項目的接口契約module,通過構建只是maven install到Jenkins服務器的本地倉庫,給這三個項目的應用服務程序提供jar依賴。
整合之前發版時構建BOSS開工、智能出行的任務時都很正常。為什么加上整合項目的Jenkins任務后,會出現這種“構建亂象”呢?
如下是任務構建時出現的“亂象”:
解決辦法:
在Jenkins任務配置的“構建觸發器”里,去掉勾選Build whenever a snapshot dependency is built。
原來,BOSS開工、智能出行、整合這三個項目的artifact的版本都是snapshot(IDEA新建工程時,pom文件默認指定的項目版本是1.0.1-SNAPSHOT),這個選項的意思是:只要快照依賴任務被構建,就構建當前任務。
就是說,[P1]項目依賴[P2]項目的一個快照版本的module[M],如果[P1]和[M]都有Jenkins構建任務時,那么,當[M]任務構建時,就會觸發[P1]任務的構建。
所以,就不難理解上文的“構建亂象”了。
如果不需要這樣,那解決辦法,自然是不啟用這一項了。當然,把項目版本變更成release也未嘗不可。
附Jenkins幾種構建觸發器(Build Triggers)解釋:
Build whenever a snapshot dependency is built
當job依賴的快照版本被build時,執行本job。
Build after other projects are built
當本job依賴的job被build時,執行本job
Build periodically
隔一段時間build一次,不管版本庫代碼是否發生變化。
Poll SCM
隔一段時間比較一次源代碼如果發生變更,那么就build。否則,不進行build。
whenever
英 [wenˈevə(r)] 美 [wenˈevər]
conj.
在任何…的時候;無論何時;在任何…的情況下;每當;每次;別的什么時候(也可以);任何時間(都行)