转载请标明出处: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下目前尚未测试,后续调研一下