首页
登录 | 注册

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的响应:

jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

一般默认的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上,设置参数化构建过程,填写:

jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

然后在构建后操作中选中 Parameterized :

jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

然后将当前job的参数传递到testA job上:

jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

在testA job上,设置一个同名的参数,然后将其打印出来:

jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

最终的测试结果:

jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

正确的获得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 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

 

四、mac下利用环境变量来获取当前分支信息

这个方法目前只在mac上测试过,在每次git推送信息给对应的打包机(mac系统)的时候,当前打包机的环境变量中会有这次推送的相关信息,而python是有Jenkins的package的,那么可以这样获取:

 

import os

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

 

你会看到当前输出的就是对应的gitlab推送过来的分支,mac下目前亲测有效,windows下目前还没有测试,后续调研一下

 


相关文章

  • 转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述 整理遇到的一些较难处理的bug,总结相关经验 二.主要问题 2.1 material类型的依赖修改 对于material类型的asset,如果修改了其s ...
  • 一.背景: 项目中有一些特殊的需求,如个别渠道继承腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需求本身,往往都与外部集成进来的功能有关, ...
  • java中常见的集合类大部分是非线程安全的,在多线程情况下会报并发修改异常(ConcurrentModificationException) 并发下的ArrayList类: 1 //集合类不安全的例子 2 public class Coll ...
  • 浅谈unity中gamma空间和线性空间
    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述    很久没有写文章了,今天写一篇对gamma空间和线性空间的个人理解总结,在查阅和学习了各个资料后,算是一个个人笔记吧.   二.Gamma颜色空间和 ...
  • Containerd 简介
    我们可以把 docker 抽象为下图所示的结构(此图来自互联网): 从图中可以看出,docker 对容器的管理和操作基本都是通过 containerd 完成的. 那么,containerd 是什么呢?Containerd 是一个工业级标准的 ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.079 s.
京ICP备10005923号