zoukankan      html  css  js  c++  java
  • 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 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下目前还没有测试,后续调研一下

  • 相关阅读:
    【Python学习】读取Excel文件,并写入Excel
    异步编程
    LINQ入门
    [Leetcode Weekly Contest]207
    [Leetcode Weekly Contest]203
    VsCode插件,自动生成注释koroFileHeader
    vue样式穿透 ::v-deep的具体使用
    springcloud,springboot,springcloud-alibaba 之间版本关系
    sharding-sphere 单库分表实例
    CDN动态加速技术
  • 原文地址:https://www.cnblogs.com/zblade/p/9897604.html
Copyright © 2011-2022 走看看