jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支
转载请标明出处: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脚本来获取当前远程仓库上的各个分支的最新提交信息:
for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ci %cr" $branch | head -n ` \\t$branch; done | sort -r
这段代码来自: https://gist.github.com/jasonrudolph/1810768 ,版权归这位老哥所有
这时候获得的信息示例:
-- :: - hours ago origin/master
-- :: - days ago origin/--stable
-- :: - days ago origin/--stable
-- :: - weeks ago origin/--stable
-- :: - weeks ago origin/--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
四、mac下利用环境变量来获取当前分支信息
这个方法目前只在mac上测试过,在每次git推送信息给对应的打包机(mac系统)的时候,当前打包机的环境变量中会有这次推送的相关信息,而python是有Jenkins的package的,那么可以这样获取:
import os ....
git_branch = os.getenv('gitlabTargetBranch')
print(git_branch)
你会看到当前输出的就是对应的gitlab推送过来的分支,mac下目前亲测有效,windows下目前还没有测试,后续调研一下
jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支的更多相关文章
- IOS开发之实现App消息推送(最新)
好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多 ...
- iOS开发中的远程推送实现(最新,支持iOS9)
我的个人项目<丁丁印记>中加入了远程推送功能,按照操作说明去做还是比较容易实现的,但是学的不够不系统,而且iOS8之后的推送和之前的版本是有所不同的,因此这篇文章希望总结一下最新的iOS推 ...
- VSCODE 使用gitlab 推送代码的简单总结
1. 前提条件: 有一个gitlab 服务器 自己的windows机器上面已经形成了 ssh key 以及进行了 gitlab global config 的配置 能够正常联系gitlab数据库 2. ...
- Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明
Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...
- 添加极光推送以及在ios中的问题
项目为 ionic1 + angular1 1.添加极光推送插件 用cordova进行添加 cordova plugin add jpush-phonegap-plugin --variable AP ...
- (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial
本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...
- SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用
最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...
- APP消息推送机制的实现(PUSH)
出于好奇,想了解一下消息推送机制,在网上搜索到了几篇文章,感觉还不错,粘贴下来,等真正用到的时候再仔细研究 以下两篇是关于ios的 1.http://blog.csdn.net/xyxjn/artic ...
- 将已有Git库代码推送到新建库中
cd /path/to/your/git/repo/ git remote -v git remote rm origin git remote add origin ssh://abc@gmail. ...
随机推荐
- SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。
本文是在学习https://blog.csdn.net/housisong/article/details/1452249一文的基础上对算法的理解和重新整理,再次非常感谢原文作者的深入分析以及分享. ...
- MAC下安装如何安装mysql?
最近有位搞开发的朋友,估计是买了一个新的MAC本,他说不是很熟悉这个系统(什么人哪,太懒了!),于是让我给他装一下后台开发过程中经常使用的数据库软件MYSQL,今天给大家分享一下我的操作步骤以及出现问 ...
- 在MFC中UpdateData()的作用
UpdateData()用来刷新数据,其中UpdateData(true)将控件中的数据传递到控件捆绑的变量中去.UpdateData(false)将变量值传递到控件中去.例如:窗口中用 DDX_Te ...
- BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配
BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配 题意: 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回 ...
- DNS Server Centos 7
1.安裝服務 #yum update –y #yum install bind –y #systemctl start named 開啟服務named #systemctl ...
- 配置(迁移)Laravel的注意事项
1.如果Laravel是在Linux下运行,如果权限不足,会报错 2.如果是从git上clone下来的项目,需要安装composer,切到项目根目录下 composer install compose ...
- 《HelloGitHub》第 37 期
公告 欢迎熟悉 C# 热爱开源的小伙伴加入我们,点此联系我 <HelloGitHub>第 37 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub ...
- Error Code: 1044. Access denied for user 'root'@'%' to database
mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user; +--------------+--------- ...
- Adobe Photoshop CC 2019 for Mac v20.0.4 中文版安装教程
全新Adobe Photoshop CC 2019 mac特别版终于上线了,简称ps cc 2019,Adobe Photoshop CC 2019 for Mac v20.0.4 中文版安装教程分享 ...
- Shell中去除字符串前后空格的方法
[root@local ~]# echo " A BC " A BC [root@local ~]# eval echo " A BC " A BC 或者 [r ...