赞
踩
#!/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地址
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。