Spring Cloud Alibaba 微服务项目开发测试环境自动化部署

Posted licbc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Alibaba 微服务项目开发测试环境自动化部署相关的知识,希望对你有一定的参考价值。

问题描述

平常我们使用IntelliJ IDEA 开发还是比较多的,工具的强大自然不用说,用好工具确实能能省下不少事情,提升开发效率,在单体架构的开发时,手动编译、打包、上传、部署都还可以接受,但在我们使用IDEA 开发微服务项目时,就会遇到问题,动不动几十个服务,如果都这么来一遍(当然如果是微你是微服务团队,专人负责固定几个服务除外),估计手都要废了,能不能借助工具将这个过程自动化呢?能省点时间上个厕所,抽根烟,吃点零食也可以嘛,本文就介绍一种简单的方法实现开发环境的自动发布

微服务常用组件

一般采用 spring cloud 或 spring cloud alibaba 较多,常用会有以下几个组件

注册中心 eureka / nacos
网关服务 zuul / srping cloud gateway
基础服务 如:user-center (用户中心) uaa-center(授权中心) 等
业务服务 如: account-center (账户中心) product-center (产品中心) finance-center (财务中心) 等

实现技术

主要目标:实现在IDEA中双击完成自动编译、打包、上传到服务、部署整个过程
实现技术:使用Maven插件 + shell 脚本

服务器脚本准备

构建前要在服务端事先配置好脚本,安装好JDK并配置好环境变量

在linux服务器上创建服务目录
mkdir -p /usr/local/service/account
在该目录下放置 account.sh  change.sh 两个脚本,脚本内容如下

account.sh (服务启停脚本)

#!/bin/bash
export JAVA_HOME=/usr/local/java
export PATH=.:$JAVA_HOME/bin:$PATH

APP_NAME=account-center
JAR_FILE=$APP_NAME.jar
LOG_PATH=./log

start(){
  checkpid
  if [ ! -n "$pid" ]; then
    echo "启动命令"
    echo "nohup java -jar $JAR_FILE >nohup.out &"
    nohup java  -server -Xms1024m -Xmx1024m -XX:PermSize=200m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar $JAR_FILE --spring.profiles.active=test --logging.level.root=debug >> nohup.out 2>&1 &
    sleep 35s
    echo "执行成功"
  else
      echo "$APP_NAME is runing PID: $pid"
  fi
}

checkpid(){
    pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}

stop(){
    checkpid
    if [ ! -n "$pid" ]; then
     echo "$APP_NAME not runing"
    else
      echo "$APP_NAME stop..."
      kill $pid
      sleep 2s
      kill -9 $pid
    fi
}

restart(){
    stop
    sleep 1s
    start
}

status(){
   checkpid
   if [ ! -n "$pid" ]; then
     echo "$APP_NAME not runing"
   else
     echo "$APP_NAME runing PID: $pid"
   fi
}
case $1 in
          start) start;;
          stop)  stop;;
          restart)  restart;;
          status)  status;;
              *)  echo "require start|stop|restart|status"  ;;
esac

change.sh (用途:备份原文件,重启服务)

#!/bin/bash
APP_NAME=account-center
cd /usr/local/service/account/
sh account.sh stop
mv $APP_NAME.jar /tmp/$APP_NAME.jar.$(date "+%Y%m%d%H%M%S")
rm -rf $APP_NAME.jar
mv $APP_NAME.jar.1 $APP_NAME.jar
nohup sh account.sh start &

配置Maven自动发布

下面拿一单个服务account-center (用户中心)举例,其它服务方式类似:

第一步: 在微服务pom.xml 增加插件(wagon-maven-plugin) 如下

<build>
    <plugins>
      <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>wagon-maven-plugin</artifactId>
      <version>2.0.0</version>
      <configuration>
        <fromFile>target/account-center.jar</fromFile>
        <toFile>account-center.jar.1</toFile>
        <url><![CDATA[scp://${env.user}:${env.password}@${env.targetip}:${env.port}/usr/local/scl-service/account]]></url>
        <commands>
          <command>sh /usr/local/service/account/change.sh;</command>
        </commands>
        <displayCommandOutputs>true</displayCommandOutputs>
      </configuration>
    </plugin>
  </plugins>
</build>

${env.user} 变量我们从中maven 构建命令行传入

第二步:配置mavn构建目标
在IDEA Maven 视频,右建account-center服务的Lifecycle ,单击 Create
在这里插入图片描述
配置命令行如下:
在这里插入图片描述
command line:

clean package wagon:upload-single -Dmaven.test.skip=true -Dspring.profiles.active=prod -Denv.user=deployer -Denv.password=123456 -Denv.targetip=192.168.3.35 -Denv.port=22 -f pom.xml

第三步:执行Maven构建目标
双击刚才创建的Maven构建任务即可完成自动发布
在这里插入图片描述

以上是关于Spring Cloud Alibaba 微服务项目开发测试环境自动化部署的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Alibaba 微服务项目开发测试环境自动化部署

Spring Cloud Alibaba 微服务项目开发测试环境自动化部署

一种Spring Cloud Alibaba微服务架构图设计

一种Spring Cloud Alibaba微服务架构图设计

一种Spring Cloud Alibaba微服务架构图设计

Spring Cloud Alibaba全家桶——Spring Cloud Alibaba介绍