当前位置:   article > 正文

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137

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

# build.sh 脚本文件名,第一个test表示打包第一个项目的分支名,第二个test表示打包第二个项目的分支名,第三个ip地址表示实际要发布的IP地址,前提需要ssh免密登录
sh build.sh test test ip地址
  • 1
  • 2
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/936354
推荐阅读
相关标签
  

闽ICP备14008679号