Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

一、 相关插件安装

1.安装GitLab相关插件

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

2.NodeJS插件

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

3.Maven 插件

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

4.手动安装插件

网络或者其他原因,可能导致插件安装失败。

可以采用手动安装的方式。

  • 手动下载jenkins插件:jenkins插件下载地址:http://mirror.xmission.com/jenkins/plugins/ ,一般下载下来后缀为hpi,如下载下来是zip的,记得把后缀修改为hpi

  • 打开jenkins,点击 系统管理——>插件管理——>高级,选择本地文件,点击提交。

二、Jenkins相关配置

1.全局工具配置

系统管理-->全局工具配置:

将服务器安装的Git、Maven以及Node 起一个名字进行配置。(也可用Jenkins带的“自动安装”,不过网络差的话可能很慢)。

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

2.系统配置,设置 GitLab

系统管理-->系统设置,找到GitLab,填写上名称与GitLab并写上主机地址,点击【添加】来添加证书。

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

这里我们选择添加 GitLab API token

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

登陆GitLab

点击右上角头像-->设置-->访问令牌

输入令牌名称,然后勾选api,点击下方 创建个人访问令牌,复制token,并保存下来。因为下次就不可见了。然后在Jenkins中粘贴

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

三、创建vue前端任务

1.创建任务

输入任务名称,点选“构建一个自由风格的软件项目”,点击确定。

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

2.general

这里描述就随便写写,丢弃旧的构建可以选上,节省空间。

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

3.源码管理

选择"Git",将项目git连接复制,并点击【添加】添加git用户名/密码;

输入指定分支。

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

4.构建触发器

这里我们点选,当GitLab提交触发,点击下面的【高级】

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

拉到下面创建一个token

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

创建完成后,进入GitLab上的前端项目,点击【设置】-->【集成】

将 上面Build when a change is pushed to GitLab. GitLab webhook URL: 后面跟的项目链接 与 刚刚 生成的token输入,点击【Add webhook】

添加成功后,可以点选测试,Push events 如果弹出 200 说明测试通过。

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

5.构建环境

构建环境选择node,然后NodeJS Installation 这里下拉选择上面在全局系统配置中设置的node

Linux上GitLab+Jenkins实现Vue、Spring Cloud项目的自动部署

6.构建

构建这里,我们选择shell脚本。

npm -v
cnpm install                        // 下载 node moudles
node build/build.js                 //构建
tar -zcvf dist.tar.gz ./dist        //将生成的dist 打成压缩包

mv ./dist.tar.gz /var/www/vue;      //移动到Nginx配置的项目目录下面
 
cd /var/www/vue;                    
rm -fr ./static         
tar -zxvf ./dist.tar.gz ./;         //解压 刚才打的dist压缩包    
mv ./dist/* ./                      //删除
rm -fr ./dist
rm -fr ./dist.tar.gz;

然后点击保存,就可以了。

四、创建Sping Cloud 任务

创建Spring Cloud 跟创建 Vue前端任务类似,只是构建环境可以不选,然后更改构建中的shell。

首先为每一个服务创建一个通用的脚本,模板如下:

#spring boot Jar包目录
APP_NAME=/root/app/springBoot/robotcenter.jar
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh robotcenter.sh [start|stop|restart|status]"
    exit 1
}
 
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}
 
#启动方法
start(){
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    #这个dontKillMe 是一定要加的,不然jenkins会杀死这个进程,导致服务退出
    BUILD_ID=dontKillMe
    #将日志输出到robotcenter.out,自己命名
    nohup java -jar ${APP_NAME}  >robotcenter.out 2>&1 &
  fi
}
 
#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi  
}
 
#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}
 
#重启
restart(){
  stop
  sleep 5
  start
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

然后编写构建shell脚本

#首先关闭所有的服务
sh /home/shell/eureka.sh stop 
sh /home/shell/zuul.sh stop
sh /home/shell/web.sh stop
#进入jenkins的工作空间 对应的Spring Cloud项目地址
cd /var/lib/jenkins/workspace/Project/
# clean install 清除之前的包,并将所有模块 打包
mvn clean 
mvn install
# 进入每个需要部署服务的target目录,将jar包移动到指定目录
cd /var/lib/jenkins/workspace/Project/Project-server-eureka/
cd target/
mv Project-server-eureka-0.0.1-SNAPSHOT.jar /home/Project/
cd /var/lib/jenkins/workspace/Project/Project-server-zuul/
cd target/
mv Project-server-zuul-0.0.1-SNAPSHOT.jar /home/Project/
cd /var/lib/jenkins/workspace/Project/Project-server-web/
cd target/
mv Project-server-web-0.0.1-SNAPSHOT.jar /home/Project/
#启动每个服务的启动脚本
sh /home/shell/eureka.sh start
sh /home/shell/zuul.sh start
sh /home/shell/web.sh start