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
网友评论