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. ...
随机推荐
- MySQL数据库创建表报错的解决方案
实体类 package com.tao.pojo; public class Student { private String id; private String name; private Str ...
- 在当前图纸中创建一个表格, AcDbTable 类
Table 例子学习笔记在这个例子中,ARX向我们展示了ACDBTABLE类的一些基本操作方法,ACDBTABLE类是ACAD2005及其以后的产品,应该是说ACDBDATATABLE的升级产品,Ac ...
- Maven的安装步骤
1.确保jdk安装成功,注意在系统环境下,必须添加jdk的路径.2.将maven的路径配置在系统环境变量中.3.修改maven的默认路径,即:将config下的settings.xml文件中的目录节点 ...
- 浅析 .Net Core中Json配置的自动更新
Pre 很早在看 Jesse 的Asp.net Core快速入门的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重" ...
- 浅析一款扫描dom-xss的浏览器插件
目录 0x00 前言 0x01 浅析 0x00 前言 这款插件的名字叫 ra2-dom-xss-scanner,其作者刚好也是jsprime的开发者,后续有可能会继续跟进一下jsprime.这个ra2 ...
- kube-proxy的功能
Kube-proxy的功能 我们知道POD的IP是动态分配的而且经常会变,所以为了可以通过一个不太容易变化的IP访问POD就会使用一个叫做service的东西,通过标签选择器和POD进行关联. Ser ...
- 你需要知道的这几种 asp.net core 修改默认端口的方式
一般情况下,aspnetcore发布后的默认端口是5000,这个大家都知道,而且默认骨架代码中没有看到任何让你输入的ip地址和端口号,但作为程序员的我们,不希望 被框架所管制,那如何实现默认端口的修改 ...
- 微服务框架surging学习之路——序列化
1.对微服务的理解 之前看到在群里的朋友门都在讨论微服务,看到他们的讨论,我也有了一些自己的理解,所谓微服务就是系统里的每个服务都 可以自由组合.自由组合这个就很厉害了,这样一来,每个服务与服务之间基 ...
- .NET 平台上C#语言的基本技术点
第一次用画图3D画的知识点,有点丑..........开始Csharp之路
- DSAPI显示PNG异形窗体
使用DSAPI实现PNG异形窗体,注意,该窗体为层样式窗体,以PNG或32位带透明通道的图像合成到屏幕,此方法不会触发窗体的重绘,故原窗体(包括其子控件)均不会显示,如果需要更新画面,需要重新用代码等 ...