转载请标明出处: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来自哪一个分支的更多相关文章

  1. IOS开发之实现App消息推送(最新)

    好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多 ...

  2. iOS开发中的远程推送实现(最新,支持iOS9)

    我的个人项目<丁丁印记>中加入了远程推送功能,按照操作说明去做还是比较容易实现的,但是学的不够不系统,而且iOS8之后的推送和之前的版本是有所不同的,因此这篇文章希望总结一下最新的iOS推 ...

  3. VSCODE 使用gitlab 推送代码的简单总结

    1. 前提条件: 有一个gitlab 服务器 自己的windows机器上面已经形成了 ssh key 以及进行了 gitlab global config 的配置 能够正常联系gitlab数据库 2. ...

  4. Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明

    Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...

  5. 添加极光推送以及在ios中的问题

    项目为 ionic1 + angular1 1.添加极光推送插件 用cordova进行添加 cordova plugin add jpush-phonegap-plugin --variable AP ...

  6. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

  7. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用

    最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...

  8. APP消息推送机制的实现(PUSH)

    出于好奇,想了解一下消息推送机制,在网上搜索到了几篇文章,感觉还不错,粘贴下来,等真正用到的时候再仔细研究 以下两篇是关于ios的 1.http://blog.csdn.net/xyxjn/artic ...

  9. 将已有Git库代码推送到新建库中

    cd /path/to/your/git/repo/ git remote -v git remote rm origin git remote add origin ssh://abc@gmail. ...

随机推荐

  1. SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。

    本文是在学习https://blog.csdn.net/housisong/article/details/1452249一文的基础上对算法的理解和重新整理,再次非常感谢原文作者的深入分析以及分享. ...

  2. MAC下安装如何安装mysql?

    最近有位搞开发的朋友,估计是买了一个新的MAC本,他说不是很熟悉这个系统(什么人哪,太懒了!),于是让我给他装一下后台开发过程中经常使用的数据库软件MYSQL,今天给大家分享一下我的操作步骤以及出现问 ...

  3. 在MFC中UpdateData()的作用

    UpdateData()用来刷新数据,其中UpdateData(true)将控件中的数据传递到控件捆绑的变量中去.UpdateData(false)将变量值传递到控件中去.例如:窗口中用 DDX_Te ...

  4. BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配

    BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配 题意: 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回 ...

  5. DNS Server Centos 7

    1.安裝服務 #yum update –y #yum install bind –y #systemctl  start named             開啟服務named #systemctl ...

  6. 配置(迁移)Laravel的注意事项

    1.如果Laravel是在Linux下运行,如果权限不足,会报错 2.如果是从git上clone下来的项目,需要安装composer,切到项目根目录下 composer install compose ...

  7. 《HelloGitHub》第 37 期

    公告 欢迎熟悉 C# 热爱开源的小伙伴加入我们,点此联系我 <HelloGitHub>第 37 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub ...

  8. Error Code: 1044. Access denied for user 'root'@'%' to database

    mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user; +--------------+--------- ...

  9. 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 中文版安装教程分享 ...

  10. Shell中去除字符串前后空格的方法

    [root@local ~]# echo " A BC " A BC [root@local ~]# eval echo " A BC " A BC 或者 [r ...