jenkins定位GitLab推送的最新Webhook中push event來自哪個分支

轉載請標明出處:http://www.cnblogs.com/zblade/python

1、調研目的git

jenkins能夠和GitLab搭檔,每當GitLab上有commit的時候,均可以觸發jenkins執行相關的操做,具體的實現,能夠參看我前面的博文或者網上的相關博文,再也不贅述。github

在完成這個功能後,接下來遇到一個新的需求,就是jenkins須要獲取GitLab上的最新的push event具體來自於哪個分支,從而定位分支的信息,爲後續的操做提供分支信息。web

這篇文章就從jenkins的角度來講說如何實現這個功能,固然,實現的過程有點繞,不過目前是調研的方案之一,也能夠用python結合sh腳原本實現,這個在後面會闡述。windows

 

2、GitLab webhook + Parameterized Trigger plugin實現Jenkins獲取對應分支的push commit triggergitlab

一、Jenkins 設置只響應對應分支的push event測試

安裝完GitLab相關的插件(參考前面的博文),咱們能夠具體的配置Jenkins端對GitLab 的webhook的響應:this

通常默認的commit trigger是 Allow all branches to trigger this job,在這兒,勾選第二個參數 Filter branches by name, 在Inclue中填寫你須要對應響應的分支名字: prototypeTest,這樣,當前job只會響應prototypeTest上的push event 的觸發spa

 

二、利用Parameterized Trigger 觸發Jenkins job之間的通訊prototype

在當前的這個job上,設置參數化構建過程,填寫:

而後在構建後操做中選中 Parameterized :

而後將當前job的參數傳遞到testA job上:

在testA job上,設置一個同名的參數,而後將其打印出來:

最終的測試結果:

正確的得到testParamA傳遞過來的參數。

說完實現的操做,那麼對應本文的目的,能夠這樣設計實現:

在testParamA中,只響應對應的分支,好比 prototypeTest 的push event, 在響應後,就傳遞給後續或者本job,執行對應 prototypeTest的操做。

 

3、利用sh腳本和python代碼,實現對git 最新提交的分支獲取

前面實現的方法,有一個弊端,就是一個git分支得對應的建立一個job,若是有多個分支,則須要在jenkins上建立多個job。此外,須要對着多個jenkins job進行維護,由於gitlab的分支在

開發過程當中新建和刪除,這都帶來一個很大的不便利性。因此,改用python代碼來獲取當前遠程倉庫上最新一次提交的版本信息。很簡單的幾個代碼:

首先是sh腳原本獲取當前遠程倉庫上的各個分支的最新提交信息:

for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ci %cr" $branch | head -n 1` \\t$branch; done | sort -r

這段代碼來自: https://gist.github.com/jasonrudolph/1810768 ,版權歸這位老哥全部

這時候得到的信息示例:

2012-02-12 03:20:24 -0800 9 hours ago     origin/master
2012-02-10 10:34:35 -0800 2 days ago     origin/3-2-stable
2012-01-31 09:56:12 -0800 12 days ago     origin/3-1-stable
2012-01-24 11:18:06 -0800 3 weeks ago     origin/3-0-stable
2011-12-31 05:09:14 -0800 6 weeks ago     origin/2-3-stable

可見咱們得到了各個分支的最新提交,並作一個排序,排在第一個的,就是最近的一次提交,用python腳原本操做得到這個版本:

results = os.popen('sh getGitCommit.sh').read().splitlines()
latest_log = results[0].split()
length = len(latest_log)

branch_info = latest_log[length - 1]
branch_name = branch_info.split('/')[1]
print(branch_name)

最終,成功得到當前最新一次提交來自於具體的哪個分支 branch_name

 

4、mac下利用環境變量來獲取當前分支信息

這個方法目前只在mac上測試過,在每次git推送信息給對應的打包機(mac系統)的時候,當前打包機的環境變量中會有此次推送的相關信息,而python是有Jenkins的package的,那麼能夠這樣獲取:

 

import os

....
git_branch = os.getenv('gitlabTargetBranch')
print(git_branch)

 

你會看到當前輸出的就是對應的gitlab推送過來的分支,mac下目前親測有效,windows下目前尚未測試,後續調研一下

相關文章
相關標籤/搜索