Jenkins+GitLab远程部署SpringCloud微服务
之前用jenkin部署过单体架构,今天试一下用Jenkins部署微服务到远程服务器。
我的微服务项目结构:
使用Jenkins的思路是使用maven单独打包成一个个微服务的jar包,推送到远程服务器,并使用脚本把这些jar包启动起来。
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
快速安装jenkin
Jenkins版本差异很大,里面的面板跟功能可能都不太一样。我目前正在使用的最新版本的Jenkins的docker镜像,我打包推送到了github,直接下载就可以了。
拉取镜像:
启动容器:
一定要-v 做宿主机挂载,方便从宿主机中取登录密码,配置文件以及打包的文件,注意安装权限。
浏览器访问:
http://10.10.11.80:9989/
获取登录密码:
宿主机里面查看密码:
管理员登录名,密码自己设置。
初始化插件
安装推荐的插件,如果插件安装这一步失败,把容器删了重新做一个容器。
配置jenkins
配置Jenkins主要是配置三个地方:
插件管理-安装插件:
选择系统管理 -> 插件管理 选择可选插件,安装publish over ssh和Maven Integration,没有中文界面的还可以安装中文插件Localization: Chinese (Simplified),我这里用的gitlab,所以gitlab的插件也得安装一下:
系统管理-全局工具配置:
配置maven:
配置一下jdk:
jenkins 容器中已经安装了jdk,把容器中jdk的安装目录放到Java_home 里面。这里有一个风险,jenkins目前不支持java8了里面自带的jdk11,不知道以后会不会有影响。如果Jenkins容器内部里面没有安装jdk8可以在容器内部安装一下。
进入容器内部:
下载:
下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
外部下载好 传到容器内部也可以,没有挂载,用docker cp 都可以。
解压:
移动到/usr/local/下面
设置环境变量:
如果容器内部没有vim命令,安装一下:
文件末尾加入:
让配置立即生效:
查看一下版本:
系统配置-配置远程服务器
前面的教程里面配置过一个jenkin远程打包vue的远程目录,所以这里配置一下微服务的地址:
这里有个坑,凭证类型,如果你的凭证不是用户密码,而是用的gitlab的token,这个凭据配置里面配一下,选择你的类型。token类型选 secret text。
点高级设置密码,
先勾选,再输入密码。
点右下角,测试一下!
配置自动部署任务
点击“新建”–填写任务名称,选择“构建一个maven项目”然后保存:
点击配置:
General
源码管理
配置gitlab:
填一下gitlab的用户名,密码,别的不用管。
现在显示有权限了:
记得修改一下分支:
构建触发器
勾选Build whenever a SNAPSHOT dependency is built
构建环境
Pre Steps
maven父子项目依赖指令配置:
单独构建并打包子模块模块:
Build
Root POM选择项目根目录的pom.Xml
Goals and options 使用maven命令打包(打包命令根据自己需要)
Post Steps
构建后操作
选择推送到远程服务器 Send build artifacts over SSH
构建环境配置.ssh server选择ssh配置上的远程服务器名称。因为我在系统设置里面配置了两个远程打包的目录,这里选jar的目录。
source files 填入工作空间里面有很多任务文件夹,进入你的任务里面jar的全路径
Remove prefix 去掉前面无用的路径
remote directory 目标服务器文件夹,就是ssh配置的那个路径,同步过来的文件都放在那个路径下面,最好设置一个新的文件夹
exec command 就是文件传过去后,所执行的启动脚本。
如果不知道source files的目录:
可以把构建后远程这一步空着,先执行拉取代码和用maven打包,再去Jenkins工作空间里面去看一下。
Jenkins容器中的工作目录/var/jenkins_home/workspace/ 如果跟宿主机做挂载了去宿主机的目录里面(我这里做了挂载) 验证是不是有工程代码。
所有的Jenkins的任务都在这个目录里面:
打开你要验证的任务:
打开你要部署的微服务:
看看里面的target目录里面有没有jar包。
构建
查看控制台日志
查看一下Jenkins的工作目录,看一下是不是已经打包好了。
再去远程服务器的目标文件夹里面看看是不是已经同步过来了。
用Jenkins打包还是比较成熟的,遇到问题跟踪控制台日志可以一步一步测试。
部署成功一个服务,别的服务也是一样的步骤:
一个服务建一个任务,把不同服务打好的jar,分别同步到远程服务器,分别执行对应的脚本启动。
脚本样例:
最终的效果: