阿里云云效CI/CD配置

本文详细介绍了如何配置Node.js项目(以Vue为例)的构建流程,包括清理缓存、安装依赖、打包和主机部署,以及Springboot项目的部署脚本,涉及启动、停止、重启和部署操作,以及健康检查的实现。
摘要由CSDN通过智能技术生成

1.NODEJS项目流水线配置(vue举例)

nodejs构建配置

官方教程

注意:下图的dist是vue项目打包目录名称,根据实际名称配置 

# input your command here
cnpm cache clean --force
cnpm install
cnpm run build

主机部署配置

rm -rf /home/vipcardmall/frontend/
mkdir -p /home/vipcardmall/frontend
#解压构建的dist压缩包到指定目录
tar zxvf /home/flowapp/vip_card_mall_user_frontend_v2.tgz -C /home/vipcardmall/frontend
#删除dist压缩包
rm -rf /home/flowapp/vip_card_mall_user_frontend_v2.tgz

下图红框的是webhook触发地址,通过post/json触发,触发后会自动触发流水线,请求参数{},触发成功返回

{
    "object": true,
    "successful": true
}

2.springboot项目部署

deploy.sh

#!/bin/bash

#---------------------------配置开始----------------------------------
# 修改APP_NAME为云效上的应用名
APP_NAME=openapi-service-0.0.1-SNAPSHOT
PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT_SECONDS=70    # 等待应用启动的时间(秒)
APP_PORT=11112          # 应用端口
BASE_URL=http://127.0.0.1:${APP_PORT}/openapi-service  # 应用的基础URL
HEALTH_CHECK_URL=${BASE_URL}/common/heartCheck  # 应用健康检查URL
APP_HOME=/home/adminsystem/backend/openapi # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/${APP_NAME}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/prod.log  #应用的启动日志
PACKAGE_PATH=/home/flowapp/mall-openapi.tgz  #制品路径
SHUTDOWN_URL=${BASE_URL}/common/actuator/shutdown #优雅关闭地址
SHUTDOWN_TIMEOUT_SECONDS=70 #优雅停机超时时间(秒)
SPRING_PROFILE="prod" # The Spring profile to activate
#---------------------------配置结束----------------------------------


# 创建出相关目录
mkdir -p ${APP_HOME}
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_SECONDS} ]; then
                echo 'app start failed'
               exit 1
            fi
        done
    echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
    echo "starting java process"
    nohup java -jar -Xmx512m -Xms256m -Dspring.profiles.active=${SPRING_PROFILE} -Dserver.port=${APP_PORT} ${JAR_NAME} >${JAVA_OUT} 2>&1 &
    echo "started java process"
}

stop_application() {
    # 查找Java进程ID
    checkjavapid=$(ps -ef | grep java | grep ${APP_NAME} | grep ${APP_PORT} | grep -v grep | awk '{print $2}')
    
    # 如果没有发现Java进程,则直接返回
    if [[ ! $checkjavapid ]]; then
        echo "No java process to stop (process not found)"
        return
    fi

    # 向Java进程发送SIGTERM请求
    echo "Sending SIGTERM to Java process with PID ${checkjavapid}."
    kill -15 ${checkjavapid}

    # 等待Java进程停止
    for ((i=0; i<$SHUTDOWN_TIMEOUT_SECONDS; i++)); do
        # 使用curl检查心跳接口
        http_status=$(curl -o /dev/null -s -w "%{http_code}\n" ${HEALTH_CHECK_URL})
        
        # 如果状态码不是200,则强制结束进程
        if [ "$http_status" != "200" ]; then
        	   echo "Java process stopped gracefully."
	        # 如果找到PID,则使用kill -9命令强制结束进程
	        if [ ! -z "$checkjavapid" ]; then
	            kill -9 $checkjavapid
	            echo "Killed process on port $APP_PORT."
	        fi	        
        	   return
        fi
        
        sleep 1
        echo "Waiting for Java process to stop..."
    done

    # 如果Java进程在等待时间后仍然存在,则发送SIGKILL
    echo "Java process did not stop after $SHUTDOWN_TIMEOUT_SECONDS seconds, sending SIGKILL"
    if [ ! -z "$checkjavapid" ]; then
	    kill -9 $checkjavapid
	    echo "Killed process on port $APP_PORT."
    fi
}

start() {
    start_application
    health_check
}
stop() {
    stop_application
}
deploy() {
    # 停止应用程序
    stop
    
    # 解压PACKAGE_PATH文件到APP_HOME目录
    echo "Unpacking $PACKAGE_PATH to $APP_HOME"
    if tar zxvf $PACKAGE_PATH -C $APP_HOME; then
        echo "Unpack finished successfully."
        
        # 删除原始压缩包
        echo "Removing the package $PACKAGE_PATH"
        rm -f $PACKAGE_PATH
        if [ $? -eq 0 ]; then
            echo "Package removed successfully."
        else
            echo "Failed to remove the package."
        fi
    else
        echo "Error occurred during unpacking. Exiting."
        exit 1
    fi
    
    # 启动应用程序
    start
}

case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    deploy)
        deploy
    ;;
    *)
        usage
    ;;
esac

  • 19
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端CI/CD是指通过自动化的流程来实现前端应用的持续集成和持续交付。在使用GitLab CI/CD部署前端项目时,可以通过一系列的步骤来实现自动打包UniApp应用。 首先,可以使用Docker镜像部署的方式来搭建CI/CD环境。Docker容器可以提供一个隔离的运行环境,方便管理和部署应用。 接下来,需要设置远程服务器或云服务(如阿里云OSS、华为云OBS)的相关配置。远程服务器可以作为打包后应用的存储位置,可以通过配置文件或环境变量的方式将相关信息传递给CI/CD流水线。 然后,需要编写部署脚本来实现自动打包并将应用部署到指定路径。部署脚本可以包括删除原有的dist文件、创建新的dist文件夹、解压压缩包到指定目录等操作。 最后,可以通过流水线来触发CI/CD流程。流水线可以根据代码仓库的变动触发执行,自动拉取最新代码,自动构建打包,并自动生成dist文件并部署到指定路径。 如果遇到问题,可以查看CI/CD的执行日志,以便更好地定位问题和进行排查。通过日志可以了解每个步骤的执行情况,帮助解决可能出现的错误或异常情况。 综上所述,使用GitLab CI/CD可以实现前端UniApp应用的自动打包和部署,通过配置远程服务器或云服务,并编写部署脚本,可以实现持续集成和持续交付的自动化流程。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值