轉載請标明出處:http://www.cnblogs.com/zblade/
一、調研目的
jenkins可以和GitLab搭檔,每當GitLab上有commit的時候,都可以觸發jenkins執行相關的操作,具體的實作,可以參看我前面的博文或者網上的相關博文,不再贅述。
在完成這個功能後,接下來遇到一個新的需求,就是jenkins需要擷取GitLab上的最新的push event具體來自于哪一個分支,進而定位分支的資訊,為後續的操作提供分支資訊。
這篇文章就從jenkins的角度來說說如何實作這個功能,當然,實作的過程有點繞,不過目前是調研的方案之一,也可以用python結合sh腳本來實作,這個在後面會闡述。
二、GitLab webhook + Parameterized Trigger plugin實作Jenkins擷取對應分支的push commit trigger
1、Jenkins 設定隻響應對應分支的push event
安裝完GitLab相關的插件(參考前面的博文),我們可以具體的配置Jenkins端對GitLab 的webhook的響應:

一般預設的commit trigger是 Allow all branches to trigger this job,在這兒,勾選第二個參數 Filter branches by name, 在Inclue中填寫你需要對應響應的分支名字: prototypeTest,這樣,目前job隻會響應prototypeTest上的push event 的觸發
2、利用Parameterized Trigger 觸發Jenkins job之間的通信
在目前的這個job上,設定參數化建構過程,填寫:
然後在建構後操作中選中 Parameterized :
然後将目前job的參數傳遞到testA job上:
在testA job上,設定一個同名的參數,然後将其列印出來:
最終的測試結果:
正确的獲得testParamA傳遞過來的參數。
說完實作的操作,那麼對應本文的目的,可以這樣設計實作:
在testParamA中,隻響應對應的分支,比如 prototypeTest 的push event, 在響應後,就傳遞給後續或者本job,執行對應 prototypeTest的操作。
三、利用sh腳本和python代碼,實作對git 最新送出的分支擷取
前面實作的方法,有一個弊端,就是一個git分支得對應的建立一個job,如果有多個分支,則需要在jenkins上建立多個job。此外,需要對着多個jenkins job進行維護,因為gitlab的分支在
開發過程中建立和删除,這都帶來一個很大的不便利性。是以,改用python代碼來擷取目前遠端倉庫上最新一次送出的版本資訊。很簡單的幾個代碼:
首先是sh腳本來擷取目前遠端倉庫上的各個分支的最新送出資訊:
這段代碼來自: https://gist.github.com/jasonrudolph/1810768 ,版權歸這位老哥所有
這時候獲得的資訊示例:
可見我們獲得了各個分支的最新送出,并做一個排序,排在第一個的,就是最近的一次送出,用python腳本來操作獲得這個版本:
最終,成功獲得目前最新一次送出來自于具體的哪一個分支 branch_name
四、mac下利用環境變量來擷取目前分支資訊
這個方法目前隻在mac上測試過,在每次git推送資訊給對應的打包機(mac系統)的時候,目前打包機的環境變量中會有這次推送的相關資訊,而python是有Jenkins的package的,那麼可以這樣擷取:
你會看到目前輸出的就是對應的gitlab推送過來的分支,mac下目前親測有效,windows下目前還沒有測試,後續調研一下