背景介绍

随着公司测试环境的最小化,所有软件架构部署在单一的Linux服务器上。由于原有的Docker一键部署平台不再适用,测试人员需要手动执行git clonemvn package命令。为了简化这一过程,我们开发了一个Shell脚本,将所有零散命令封装起来,并通过参数传递执行所有步骤,特别适合初学者使用。

Shell脚本内容

脚本首先定义了工作空间和日志目录,然后提示用户输入必要的参数,包括git地址、分支、war包名称等。以下是脚本的详细内容:

#!/bin/bash
# 定义工作空间和日志目录
workspace="/data1/gitwar"
logdir="/var/log/pack"
logfile="$logdir/build.log"

# 用户输入参数
read -p "请依次输入clone路径、git地址、git分支、war包名称、编译路径(git项目名称),空格隔开:" clone_path git_url branch war_name make_path

# 创建必要目录
mkdir -p $workspace $logdir

# 切换到工作空间
cd $workspace

# 检查项目是否已存在
if [ ! -d "$make_path" ]; then
    echo "开始git clone下载$make_path"
    git clone -b $branch $git_url $make_path &>> $logfile
else
    echo "删除已存在的$make_path项目"
    rm -rf $workspace/$make_path
    git clone -b $branch $git_url $make_path &>> $logfile
fi

# 检查git clone是否成功
if [ ! -d "$make_path" ]; then
    echo "$make_path git clone 失败!"
    tail -50f $logfile
    exit 1
else
    echo "$make_path项目 git clone 成功!"
    cd $workspace/$make_path
    echo "开始构建$war_name包"
    starttime=$(date +'%Y-%m-%d %H:%M:%S')
    mvn clean package -U -P product -Dmaven.test.skip=true &>> $logfile
    endtime=$(date +'%Y-%m-%d %H:%M:%S')
    duration=$(($(date --date="$endtime" +%s) - $(date --date="$starttime" +%s)))
    echo "本次运行时间: $duration 秒"
fi

# 检查war包是否构建成功
if [ -f "target/$war_name.war" ]; then
    echo "war包构建成功!"
    tail -n 16 $logfile
    if [ "\$1" == "deploy" ]; then
        echo "打包上预发布"
        cp target/$war_name.war /data/deploy/
    fi
else
    echo "war包构建失败!"
    tail -n 50 $logfile
    exit 1
fi
脚本功能解析
  • 定义工作空间和日志目录:设置脚本的工作目录和日志文件的存储路径。
  • 用户输入参数:通过read命令提示用户输入必要的参数,包括克隆路径、git地址、分支、war包名称和编译路径。
  • 创建目录:使用mkdir -p命令创建必要的目录结构。
  • 执行git clone:根据项目是否存在,执行克隆或删除后克隆的操作。
  • 构建项目:使用Maven命令进行项目的清理和打包,跳过测试,并记录日志。
  • 检查构建结果:检查war包是否成功生成,并根据条件决定是否部署到预发布环境。
结论

通过这个Shell脚本,我们不仅简化了测试人员的部署流程,还显著提高了工作效率。此脚本为初学者提供了一个易于理解和使用的自动化部署解决方案。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐