云效使用流水线自动部分springboot

本文详细介绍了如何在云效平台上创建项目、配置流水线,重点讲解了deploy.sh脚本的使用,包括启动、停止和重启应用,以及解决部署过程中遇到的Ubuntu系统bash和dash环境差异问题。
摘要由CSDN通过智能技术生成

云效创建项目应用以及流水线主要有以下三个步骤:

  1. 创建项目

    这个很简单略过了。。

  2. 创建流水线

图片.png

图片.png

如果项目不是云效的可以点击添加流水线源:

图片.png

配置流水线源:

图片.png

构建:

图片.png

图片.png

这里说一下deploy.sh脚本:

官方提供的例子:https://code.aliyun.com/code-template/spring-boot?spm=a2c4g.11186623.0.0.1bb17837NG6aBW

deploy.sh

#!/bin/bash

# 修改APP_NAME为云效上的应用名
APP_NAME=application


PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20    # 等待应用启动的时间
APP_PORT=8080          # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}  # 应用健康检查URL
HEALTH_CHECK_FILE_DIR=/home/admin/status   # 脚本会在这个目录下生成nginx-status文件
APP_HOME=/home/admin/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/${APP_NAME}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log  #应用的启动日志

# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
    echo "Usage: $PROG_NAME {start|stop|restart}"
    exit 2
}

health_check() {
    exptime=0
    echo "checking ${HEALTH_CHECK_URL}"
    while true
        do
            status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code}  ${HEALTH_CHECK_URL}`
            if [ "$?" != "0" ]; then
               echo -n -e "\rapplication not started"
            else
                echo "code is $status_code"
                if [ "$status_code" == "200" ];then
                    break
                fi
            fi
            sleep 1
            ((exptime++))

            echo -e "\rWait app to pass health check: $exptime..."

            if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
                echo 'app start failed'
               exit 1
            fi
        done
    echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
    echo "starting java process"
    nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
    echo "started java process"
}

stop_application() {
   checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
   
   if [[ ! $checkjavapid ]];then
      echo -e "\rno java process"
      return
   fi

   echo "stop java process"
   times=60
   for e in $(seq 60)
   do
        sleep 1
        COSTTIME=$(($times - $e ))
        checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
        if [[ $checkjavapid ]];then
            kill -9 $checkjavapid
            echo -e  "\r        -- stopping java lasts `expr $COSTTIME` seconds."
        else
            echo -e "\rjava process has exited"
            break;
        fi
   done
   echo ""
}
start() {
    start_application
    health_check
}
stop() {
    stop_application
}
case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        usage
    ;;
esac

需要注意脚本在ubuntu服务器下报unexpected operator 报错问题

解决方法一

ubuntu 默认的 shell 链接的 dash 改成传统的 bash
执行如下命令:

sudo dpkg-reconfigure dash1

在弹出的框中选 no

解决方法二

== 改成 = ,因为在 dash 中默认的判断语句是 =

部署:

图片.png

新建主机组,可以是阿里服务器或其他三方服务器

图片.png

图片.png

部署脚本需要注意

图片.png

 附上部署脚本:

# 部署脚本会在部署组的每台机器上执行。一个典型脚本逻辑如下:先将制品包(在下载路径中配置的下载路径)解压缩到指定目录中,再执行启动脚本(通常在代码中维护,如示例中deploy.sh)。关于这个例子的详细解释见 https://help.aliyun.com/document_detail/153848.html \n\n
# tar zxvf /home/admin/app/package.tgz -C /home/admin/app/\n # sh /home/admin/app/deploy.sh restart\n 
# 如果你是php之类的无需制品包的制品方式,可以使用git clone 或者 git pull将源代码更新到服务器,再执行其他命令 \n 
# git clone ***@***.git\n

mkdir -p /home/admin/application
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart

根据需要还可以配置通知方式

最终效果

图片.png

图片.png

图片.png

附上最终脚本

#!/bin/bash

# 修改APP_NAME为云效上的应用名
APP_NAME=hbydjl.com


PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20    # 等待应用启动的时间
APP_PORT=8080          # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}  # 应用健康检查URL
HEALTH_CHECK_FILE_DIR=/home/admin/status   # 脚本会在这个目录下生成nginx-status文件
APP_HOME=/var/www/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/${APP_NAME}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log  #应用的启动日志

# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
    echo "Usage: $PROG_NAME {start|stop|restart}"
    exit 2
}

health_check() {
    exptime=0
    echo "checking ${HEALTH_CHECK_URL}"
    while true
        do
            status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code}  ${HEALTH_CHECK_URL}`
            if [ "$?" != "0" ]; then
               echo -n -e "\rapplication not started"
            else
                echo "code is $status_code"
                # 解决 unexpected operator 报错问题 方式1.将ubuntu 默认的 shell 链接的 dash 改成传统的 bash(sudo dpkg-reconfigure dash) 或方式2:将 == 改成 = ,因为在 dash 中默认的判断语句是 =
                if [ "$status_code" = "200" ];then
                    break
                fi
            fi
            sleep 1
            ((exptime++))

            echo -e "\rWait app to pass health check: $exptime..."

            if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
                echo 'app start failed'
               exit 1
            fi
        done
    echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
    # 需要动态加载项目配置文件
    rm -rf ${JAR_NAME}
    cp /home/admin/application/target/xxxx.jar ${JAR_NAME}
    cd ${APP_HOME}/
    echo "starting java process"
    nohup java -jar ${APP_NAME}.jar > ${JAVA_OUT} 2>&1 &
    echo "started java process"
}

stop_application() {
   checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
   
   if [[ ! $checkjavapid ]];then
      echo -e "\rno java process"
      return
   fi

   echo "stop java process"
   times=60
   for e in $(seq 60)
   do
        sleep 1
        COSTTIME=$(($times - $e ))
        checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
        if [[ $checkjavapid ]];then
            kill -9 $checkjavapid
            echo -e  "\r        -- stopping java lasts `expr $COSTTIME` seconds."
        else
            echo -e "\rjava process has exited"
            break;
        fi
   done
   echo ""
}
start() {
    start_application
    health_check
}
stop() {
    stop_application
}
case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        usage
    ;;
esac

云效是阿里巴巴开发的一款持续集成和持续交付平台,可以帮助开发团队实现自动化的软件交付流程。而Docker是一种容器化技术,可以将应用程序及其依赖打包成一个独立的容器,实现跨平台、快速部署的特性。下面是使用云效流水线进行Docker部署Spring Boot应用的步骤: 1. 创建云效项目:在云效平台上创建一个项目,并将代码仓库与项目关联。 2. 配置构建环境:在云效平台上配置构建环境,选择合适的构建镜像,例如选择一个包含Java和Maven的镜像。 3. 编写Dockerfile:在项目根目录下创建一个名为Dockerfile的文件,用于定义Docker镜像的构建规则。在Dockerfile中指定基础镜像、复制应用程序代码、安装依赖、设置环境变量等。 4. 编写云效流水线配置文件:在项目根目录下创建一个名为pipeline.yml的文件,用于定义云效流水线的配置。在配置文件中指定构建步骤、构建触发条件、构建参数等。 5. 配置云效流水线:在云效平台上配置流水线,将构建步骤与代码仓库、构建环境、Dockerfile等关联起来。可以设置自动触发构建、定时触发构建或手动触发构建。 6. 执行流水线:提交代码到代码仓库后,云效自动触发流水线的执行。流水线会按照配置文件中定义的步骤进行构建、测试、打包和部署。 7. 部署Docker镜像:在流水线的最后一步,可以使用云效提供的部署功能,将构建好的Docker镜像部署到目标环境中,例如云服务器、容器服务等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值