Windows下使用Jenkins+Github远程持续部署到Linux服务器

Windows下使用Jenkins+Github远程持续部署到Linux服务器

一、背景

Jenkins可以和Github等Git平台挂钩,Push事件会触发钩子,Github服务器向我们的Jenkins发一条请求,达到持续集成的目的

Jenkins一般放在Linux服务器,但是我的Linux服务器性能比较差,经不起折腾,所以改为在Windows下部署Jenkis,Jenkins获取最新的代码版本进行打包后,再远程部署到Linux服务器。

二、环境

Jenkins服务器:Windows 10

应用部署服务器:Ubuntu 16.04

Git平台:GitHub

二、下载安装Jenkins

1、下载Jenkins,地址:https://www.jenkins.io/download/ ,选择Windows

Windows下使用Jenkins+Github远程持续部署到Linux服务器

2、进入Jenkins文件目录,执行Java -jar jenkins.jar,网页打开http://localhost:8080,然后因为是初次安装,所以要按它的流程走(包括Unlock,注册账号,安装初始插件)

Windows下使用Jenkins+Github远程持续部署到Linux服务器

一切顺利的话,你应该能进入到Jenkins主界面

Windows下使用Jenkins+Github远程持续部署到Linux服务器

三、安装插件Push Over SSH

Windows下使用Jenkins+Github远程持续部署到Linux服务器

聪明的你应该能找到安装插件的方法

四、构建任务(new item),和Github联系起来

假设你已经懂了怎么构建了,我一般是构建一个Maven项目(需要另外安装插件)。下面是具体构建的步骤

1、General部分。勾选Github项目,输入项目Url(格式可以是https://github.com/xxxx/xxx/,不要最后的.git)

Windows下使用Jenkins+Github远程持续部署到Linux服务器

2、源码管理部分。勾选Git,输入远程仓库地址,上面的Url后面加上.git。还需要用户名/密码,这个简单点,还可以用Secret**

Windows下使用Jenkins+Github远程持续部署到Linux服务器

3、构建触发器部分。勾选Github hook trigger for GITScm polling,如果没有这选项,说明缺少插件

Windows下使用Jenkins+Github远程持续部署到Linux服务器

同时需要Github上配置Webhooks,Push事件发生时会通知Jenkins进行新版本的代码拉取

Windows下使用Jenkins+Github远程持续部署到Linux服务器

4、构建后操作。这个是我当前最重要的需求,因为服务需要部署在Ubuntu远程服务器上,当前Jenkins是Windows平台的,所以要在从Github拉取代码后进行部署构建,构建完成后将Jar包发到Ubuntu上去,并且执行Shell脚本(Exec Command)。这个SSH Server是在系统配置中去写的。

Source files:从Github拉取后会构建,构建出来的Jar包放在哪?这个路径相对于workspace,maven项目一般就target开头

Remove prefix:可选。表示去掉target头(或其它),仅影响最终Ubuntu服务器的文件路径

Remote directory:  远程服务器的工作目录,最终构建出来的Jar包会上传到这个目录。

Exec Command:执行脚本,运行我们的Jar,我这里是先写好了一个sh脚本放在了Ubuntu上。还可用docker等方式

注意Exec command,我是用了nohup(no hang up,不要挂起),保证了这条脚本能够被执行,不会因为Jenkins远程构建命令结束而结束,不然你可能会发现啥都没干就结束了。

注意:阿里云服务器本身就有了SSH功能,所以我跳过了这一部分。如果你的服务器没打开SSH 22端口,那可能还要做多一些工作

Windows下使用Jenkins+Github远程持续部署到Linux服务器

点击“高级”按钮,因为要将Exec Command的形式设置为pty,不然的话这一个脚本可以执行,但无法退出,最终导致超时构建报错。

Windows下使用Jenkins+Github远程持续部署到Linux服务器

四、Build Now 开始构建

如果你前面基本没出错,那恭喜你可以尝试以下构建。Jenkins会从Git服务器抓取最新代码,然后在本地构建打包,我是Maven项目打包成了Jar可执行文件。然后Jenkins会执行构建后操作,就是向Ubuntu服务器传这个构建好的Jar包,然后执行Exec Command脚本,完成整个构建。

Windows下使用Jenkins+Github远程持续部署到Linux服务器Windows下使用Jenkins+Github远程持续部署到Linux服务器

Windows下使用Jenkins+Github远程持续部署到Linux服务器

可以看到Ubuntu服务器成功启动了这个传过来的Jar包,整个流程结束

五、总结

前后一共弄了两天,一开始是打算直接在Ubuntu服务器上部署的,但是机子太差,一跑起来就卡,最后转移到本机上跑Jenkins,打算先学习用着先。

有了Jenkins这样的工具,从此就告别了手动用XFtp传JAR包,然后Xshell登录进去执行java -jar xxx.jar命令这样的原始操作,方便了很多,而且我们发布版本就直接变成了往master合并分支然后push就行了,不需要再操作XFtp和Xshell。

往后,还应该将Jenkins和Docker或者K8s进行配合,打造更加方便管理的CI/CD环境。