美文网首页系统运维首页投稿(暂停使用,暂停投稿)
gitlab利用webhook实现push代码后jenkins自

gitlab利用webhook实现push代码后jenkins自

作者: 四冶读史 | 来源:发表于2017-07-18 15:23 被阅读163次

    1.概述

    利用Jenkins可以实现构建,但每次都需要人为的去执行一次“立即构建”,这样显然不方便。利用gitlab的webhook,当每次push后会触发jenkins,自动构建至目标服务器上。
    gitlab服务器:10.11.1.29
    Jenkins服务器:10.11.1.5
    目标服务器:10.11.1.6

    2.架构图

    架构图.png

    在任一台电脑提交(push)部署版本代码至GitLab,GitLab的webhook(钩子)会触发Jenkis,Jenkins则自动执行构建,构建会执行“execute windows bathc command”里的脚本,脚本内容是拉取最新的版本(git pull)

    3.实现步骤

    3.1.添加节点

    在linux服务器上搭建的Jenkins可以很好的执行“Execute shell”里的脚步,但在执行“Execute Windows batch command”里的脚本时却存在问题,经一番查找,找到了解决途径,那就是在Jnekins中添加节点
    ==登录Jenkins
    ==系统管理
    ==节点管理
    ==新增节点
    ==输入节点名称,点击确定,界面如下



    如果发现,在启动方法中没有“Launch agent via Java Web Start”选项
    解决办法:
    ==进入系统管理
    ==Configure Global Security
    =="TCP port for JNLP agents"选项选中“指定端口”,输入5555(如果不给定端口,系统会随机给一个,如果要防火墙开放端口,指定端口还是方便些)
    ==点击“Agent protocols”,勾上“Java Web Start Agent Protocal/3”
    ==保存


    33.png
    这时,应该就有“Launch agent via Java Web Start”选项
    ==填写好选项,保存
    保存后,会进入节点界面,如下:
    44.png
    ==在目标服务器(windows)中创建“远程工作目录”中的路径,然后下载保存slave.jar,在同级路径下创建launch.bat文件,添加上图中“Run from slave command line:”下的命令,双击bat命令就连通了;
    到这,又发现一个问题,执行bat会弹出一个窗口,且服务器重启后并未执行该bat命令
    解决方法:

    ==创建runbat.vbs文件,输入内容如下:

    Set ws = CreateObject("Wscript.Shell")
    ws.run "c:\jenkins\launch.bat",vbhide
    

    ==将runbat.vbs文件添加至开机启动,即将文件拷贝至“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp”下
    因为是在该文件下执行bat脚本,则需要将slave.jar的路径更改为绝对路径,更改后的launch.bat文件如下:
    java -jar c:\jenkins\slave.jar -jnlpUrl http://10.11.1.5:8080/computer/windows-server-test-10.11.1.6/slave-agent.jnlp -secret d6329bb4b5f15fbf6b5d406c255d00d8ad2ec97027b560bc5a1e5a47352e942c
    ==重启系统

    3.2.随机生成Token

    openssl rand -hex 12
    30910262eff664f2acbcb962
    

    3.3.创建Job

    在jenkins首页点击
    ==新建
    ==输入item name # 比如windows-auto-test
    ==选中“构建一个自由风格的软件项目”
    ==General处勾选“Restrict where this project can be run”,然后在Label Expression栏选中之前创建好的节点
    ==源码管理,选中None
    ==构建触发器,勾上“触发远程构建(例如,使用脚本)”,在身份验证令牌栏输入随机生成的Token:30910262eff664f2acbcb962,
    ==构建触发器,勾上“GitHub hook trigger for GITScm polling”
    ==构建,选中“Execute windows batch shell”,在Commend栏输入如下脚本:

    @echo off
    set path=%path%;C:\Program Files\Git\bin
    echo begin
    git --work-tree=h:\educationplatform-test --git-dir=h:\educationplatform-test\.git pull
    C:\Windows\System32\inetsrv\appcmd.exe stop site "educationplatform"
    C:\Windows\System32\inetsrv\appcmd.exe start site "educationplatform"
    echo end
    pause
    

    备注:
    git --work-tree=h:\educationplatform-test --git-dir=h:\educationplatform-test.git pull 在工作空间外pull代码
    C:\Windows\System32\inetsrv\appcmd.exe stop site "educationplatform" # 停止IIS网站下的应用程序池
    C:\Windows\System32\inetsrv\appcmd.exe start site "educationplatform" # 开启IIS网站下的应用程序池
    ==保存

    3.4.配置钩子

    登录Gitlab,配置钩子,不通版本的Gitlab,钩子形式可能不一样,有的是Webhooks,有的是System Hooks,我本机上的就是后者
    ==进入Gitlab
    ==进入windows-auto-test
    ==点击“System Hooks”,在弹出的界面中,URL栏输入http://10.11.1.5:8080/buildByToken/build?job=auto-test&token=
    30910262eff664f2acbcb962
    URL格式为http://jenkins服务器地址:8080/buildByToken/build?job=job名称&token=token
    勾选“Push events”
    ==保存
    ==点击“Test hook”,如果返回“Hook executed successfully:HTTP 201”,则配置成功

    3.5..push代码

    在git库中添加文件,然后push,看看目标服务器(10.11.1.6)c:\windows-test下是否多了刚才添加的文件,如果看到了,则配置成功,如果以后需要发布代码,只需push即可,jenkins会构建到目标服务器上的

    Started by remote host 10.11.1.83
    Building remotely on xpjy-test in workspace c:\jenkins\workspace\educationplatform-test
    [educationplatform-test] $ cmd /c call C:\Users\ADMINI~1\AppData\Local\Temp\2\jenkins3952684350950134845.bat
    begin
    From 10.11.1.83:aorise/educationplatform-test
       7591878..64efa4c  master     -> origin/master
    Updating 7591878..64efa4c
    Fast-forward
     README | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    “educationplatform”已成功停止
    “educationplatform”已成功启动。
    end
    请按任意键继续. . . 
    Finished: SUCCESS
    

    参考地址:
    http://blog.csdn.net/songjiaping/article/details/49587297
    http://blog.csdn.net/e295166319/article/details/54946966
    https://wiki.jenkins.io/display/JENKINS/Build+Token+Root+Plugin
    http://www.cnblogs.com/shansongxian/p/6605623.html
    http://www.cnblogs.com/reblue520/p/7146638.html

    相关文章

      网友评论

        本文标题:gitlab利用webhook实现push代码后jenkins自

        本文链接:https://www.haomeiwen.com/subject/qilhkxtx.html