本文是SpringCloud实战(九)-Docker自动化部署与持续集成,若要关注前文,请点击传送门:
SpringCloud实战(八)-断路器监控与集群监控(Hystrix Dashboard)
前文我们介绍了Hystrix的集群监控。本文主要讲述SpringCloud构建镜像和远端部署。
随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致。基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。因此,传统的人工部署已经心有余而力不足。
持续集成,持续部署,持续交互对于微服务开发来说,是提高团队整体效率不可或缺的一环。合理的使用CI,CD能够极大的提高了生产效率,也提高了产品的交互质量。
操作系统是Centos7,需要大家提前搭建好Gitlab、Jenkins,并安装好Maven、Git、Jdk1.8、Docker、Nexus3等,我已经将这些工具的安装和部署教程都写好了,下面直接带上传送门:
Centos7安装Gitlab
Centos7安装Jenkins
Centos7安装Maven
Centos7安装Jdk1.8
Centos7安装Git
Centos7安装Docker
Centos7安装Nexus3
搭建好上述环境后,我们就可以开始配置Jenkins来自动化部署了,相关架构图如下:
jenkins需要配置的细节比较多,大家千万别遗漏下任何细节哈。
1、jenkins插件安装
首先我们来安装一些需要用到的插件,Jenkins在进行页面安装的时候会自动给你安装一些插件,不过我们还需要用到其他的一些插件,我们先登录jenkins找到插件管理,访问 http://127.0.0.1:8371/,如图所示:
找到并点击可选插件tab,从过滤输入框中输入插件名就可以准确的找到该插件,然后安装就可以了,这里我列一个需要安装的插件列表:
目测应该是全的,如果下面的步骤中发现页面和我的不一样,可能是因为插件漏装了,大家直接在评论区提醒我,我立刻补全。
安装好插件之后我们找到全局工具配置(在系统管理页面上),如图所示:
点击进去,进入全局工具配置页面,如图所示:
我们在这里对Maven、Jdk、Git、Docker进行配置的,如图所示:
这里Jdk、Maven需要在环境变量中配置一下,配置详情关注上文的准备工作,然后我们的全局工具配置就配好了。
下面我们去配置系统设置,如图所示:
系统设置这里我们配置两个地方就好了,一个是SSH,一个是Gitlab,SSH的配置是为了我们能够连接到远端主机进行镜像拉取和部署,Gitlab的配置是为了和Jenkins建立关联,如图所示:
这里SSH的凭证用远端机器的登录用户名和密码,Gitlab凭证用Gitlab登录后的token,如图所示:
到这里系统设置就配置完成了。
Jenkins配置完之后,我们来新建一个任务。
我们新建一个Maven风格的项目,然后点击确定,进入到项目配置页面,这里我们需要配置Gitlab项目所在的地址,并且需要用token认证,Gitlab项目所在地址如图所示:
然后我们还需要写一下构建中和构建后执行的脚本。
1、Jenkins参数化构建
在开始写构建中和构建后执行脚本之前,需要参照以下文章搭建安装相关插件和学习参数配置,传送门如下:
Jenkins实现参数化构建
2、Docker脚本配置方式
Build阶段脚本如下:
Post Steps本地执行脚本如下:
Post Steps远端执行脚本如下:
详细配置,图示如下:
3、Kubernetes脚本配置方式
Build阶段脚本如下:
Root POM:
Goals and options:
补充:
如果工程有多个模块,在Jenkins构建的时候只需要构建其中某一个模块的镜像,此时 Goals and options 如下所示:
maven非常智能,只要父工程的pom文件中关联了子工程,可以不需要指定目录进行打包、构建。
Post Steps阶段脚本如下:
Execute shell:
Execute shell script on remote host using ssh(Master节点执行):
Execute shell script on remote host using ssh(Slave节点执行):
Execute shell script on remote host using ssh(Slave节点执行):
详细配置,图示如下:
对照着上面的图就更清楚了。
然后我们需要创建一个springboot工程,这里我直接只用本专栏前面的eureka-server工程,需要做修改的地方是需要在工程的pom文件中增加docker插件配置
如果需要将eureka-server上传到远端仓库,则需要在pom文件中增加Nexus远端仓库配置(这里的id需要与maven setting中的<servers><server><id>保持一致,通过相同的id进行配置关联)
并且需要在pom文件的同级目录新建一个Dockerfile文件,内容如下:
我们的SpringBoot工程就改造好了。
我们需要修改maven的setting文件,需要增加我们的nexus上的镜像仓库地址,所以需要我们提前在nexus中新建一个docker仓库并获取到他的镜像仓库暴露端口,图示如下
然后我们拿到docker仓库的访问路径之后,去修改maven setting中的docker仓库配置。
setting配置内容如下:
我们同时还需要修改远端主机上的docker配置文件,需要指定镜像仓库为nexus的地址,所以我们先登陆到远端主机,通过下面的命令找到配置文件
添加如下配置,将以下配置写入到文件中,保存并退出。
其中192.168.3.202:8088就是我们nexus的docker仓库暴露出来的端口地址。
修改完之后我们就可以在Jenkins中执行构建,如图所示:
然后我们就成功构建了Springboot工程,访问远端主机的服务路径,我这里是 http://192.168.3.206:8761/,之后就成功显示出eureka服务端监控平台,说明我们已经成功自动化部署了一个eureka-server项目。