一个git拉取代码并发布服务器的shell脚本

#!/bin/bash
export LANG="en_US.UTF-8"
# 遇到异常情况报错停止执行脚本
trap "echo '[ERROR] Script execution exception';exit 1;" ERR
GIT_HOME=/software-env/git
JAVA_HOME=/usr/local/java/jdk1.8.0_202
ANT_HOME=/software-env/apache-ant-1.10.14
PATH=$JAVA_HOME/bin:$GIT_HOME/bin:$ANT_HOME/bin:$PATH
ENV_PATH=/data/env-config

# 生产配置环境路径
CDCS_ENV_PATH=$ENV_PATH/CDCS/PROD
CDMS_ENV_PATH=$ENV_PATH/CDMS/PROD

# 静态变量定义
TOMCAT_DIR=/data/cdms_tomcat
CDCS_GIT_PATH=***
CDMS_GIT_PATH=***

#参数定义
cdcs_branch=$1
cdms_branch=$2
current_date=$(date +"%Y%m%d")
current_time=$(date +"%H%M%S")
# 备份文件夹
BAK_DIR=/data/bak/cdms_server/$current_date/$current_time

# 获取服务器IP
ip_address=$3

# 项目地址
PRO_BASE_PATH=/data/project/$ip_address
CDCS_PATH=$PRO_BASE_PATH/CDCS
CDMS_PATH=$PRO_BASE_PATH/CDMS

# 校验参数合法性
if [ -z "$cdcs_branch" ]; then
    echo "[ERROR] CDCS branch name IS NULL."
    exit 1  # 退出脚本,并返回状态码1
fi
if [ -z "$cdms_branch" ]; then
    echo "[ERROR] CDMS branch name IS NULL."
    exit 1  # 退出脚本,并返回状态码1
fi
if [ -z "$ip_address" ]; then
    echo "[ERROR] IP address IS NULL."
    exit 1  # 退出脚本,并返回状态码1
fi
# 校验ip地址是否合法
pattern='^([0-9]{1,3}\.){3}[0-9]{1,3}$'
if [[ ! $ip_address =~ $pattern ]]; then
    echo "[ERROR] IP address:$ip non-compliance"
    exit 1
fi

# 获取远端分支信息
cdcs_remote_branches=$(git ls-remote --heads "$CDCS_GIT_PATH" | awk -F/ '{print $NF}')
# 检查远端分支是否存在
if ! echo "$cdcs_remote_branches" | grep -q "^$cdcs_branch$"; then
    echo "[ERROR] CDCS project remote branch [$cdcs_branch] not exist."
    exit 1
fi
# 获取远端分支信息
cdms_remote_branches=$(git ls-remote --heads "$CDMS_GIT_PATH" | awk -F/ '{print $NF}')
# 检查远端分支是否存在
if ! echo "$cdms_remote_branches" | grep -q "^$cdms_branch$"; then
    echo "[ERROR] CDMS project remote branch [$cdms_branch] not exist."
    exit 1
fi

# -----------------------------------------------CDCS 检出---------------------------------------------------------------
# 第一步先拉取项目代码,已经拉取过的代码跳过
if [ ! -d "$CDCS_PATH" ]; then
    mkdir -p "$PRO_BASE_PATH"
    cd $PRO_BASE_PATH
    echo "[INFO] CDCS project not exist. Remote cloning in progress."
    git clone $CDCS_GIT_PATH
else  
    echo "[INFO] CDCS project exist."
fi
cd $CDCS_PATH
# 获取最新的提交和分支信息
git fetch origin $cdcs_branch
# 更新远程跟踪分支
git remote prune origin
# 检出最新分支代码
git checkout $cdcs_branch
# 将本地分支重置为远端分支的最新状态
git reset --hard origin/$cdcs_branch
echo "[INFO] CDCS project checkout origin/$cdcs_branch [SUCCESS]"
# 配置文件替换,如果是生产环境,配置替换生产配置
echo "[INFO] CDCS project deploying using [prod] environment."
cp -f $CDCS_ENV_PATH/* $CDCS_PATH/src/
# 使用ant打包
ant
echo "[INFO] CDCS packaging completed."
# -----------------------------------------------CDMS 检出---------------------------------------------------------------
# 第一步先拉取项目代码,已经拉取过的代码跳过
if [ ! -d "$CDMS_PATH" ]; then
    mkdir -p "$PRO_BASE_PATH"
    cd $PRO_BASE_PATH
    echo "[INFO] CDMS project not exist. Remote cloning in progress."
    git clone $CDMS_GIT_PATH
else
    echo "[INFO] CDMS project exist."
fi
cd $CDMS_PATH
# 获取最新的提交和分支信息
git fetch origin $cdms_branch
# 更新远程跟踪分支
git remote prune origin
# 检出最新分支代码
git checkout $cdms_branch
# 将本地分支重置为远端分支的最新状态
git reset --hard origin/$cdms_branch
echo "[INFO] CDMS project checkout origin/$cdms_branch [SUCCESS]"
# 配置文件替换
# 配置文件替换,如果是生产环境,配置替换生产配置
echo "[INFO] CDMS project deploying using [prod] environment."
cp -f $CDMS_ENV_PATH/* $CDMS_PATH/src/
# 使用ant打包
ant
echo "[INFO] CDMS packaging completed."
# -----------------------------------------------war包分发部署-----------------------------------------------------------
echo "[INFO] stop remote $ip_address tomcat server."
ssh admin@$ip_address "sudo sh $TOMCAT_DIR/bin/shutdown.sh" ||
# 备份war包
echo "[INFO] start backups war remote $ip_address"
ssh admin@$ip_address "sudo mkdir -p $BAK_DIR;sudo cp $TOMCAT_DIR/webapps/*.war $BAK_DIR/"
echo "[INFO] start remote packet transmission to $ip_address."
cd ..
scp **/*.war admin@$ip_address:$TOMCAT_DIR/webapps/
ssh admin@$ip_address "sudo sh $TOMCAT_DIR/bin/startup.sh"
echo "[INFO] start remote $ip_address tomcat server."
echo "[INFO] $ip_address System service started successfully."

exit 0

该脚本是打包了两个项目部署在同一个tomcat上。启动脚本命令如下:

# build.sh 脚本文件名,第一个test表示打包第一个项目的分支名,第二个test表示打包第二个项目的分支名,第三个ip地址表示实际要发布的IP地址,前提需要ssh免密登录
sh build.sh test test ip地址
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

£漫步 云端彡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值