#!/bin/bash
#初始化各类变量
HOME_DIR="/Users/zhaobo.lin/Documents/work/deploy"
# 参数处理
BRANCH_NAME=$1
GIT_URL=$2
TEMP_WAR=${GIT_URL##*/}
PROJECT_NAME=${TEMP_WAR%.*}
# 目录定义
PROJECT_BUILD_ROOT_DIR=$PROJECT_NAME"-build-root"
PROJECT_BUILD_GIT_DIR=$PROJECT_NAME
PROJECT_BUILD_LOG_DIR="log"
PROJECT_BUILD_WAR_DIR="war"
PROJECT_BUILD_INI_DIR="ini"
# 路径定义
PROJECT_BUILD_ROOT_PATH=$HOME_DIR/$PROJECT_BUILD_ROOT_DIR
PROJECT_BUILD_GIT_PATH=$HOME_DIR/$PROJECT_BUILD_ROOT_DIR/$PROJECT_BUILD_GIT_DIR
PROJECT_BUILD_LOG_PATH=$HOME_DIR/$PROJECT_BUILD_ROOT_DIR/$PROJECT_BUILD_LOG_DIR
PROJECT_BUILD_WAR_PATH=$HOME_DIR/$PROJECT_BUILD_ROOT_DIR/$PROJECT_BUILD_WAR_DIR
PROJECT_BUILD_INI_PATH=$HOME_DIR/$PROJECT_BUILD_ROOT_DIR/$PROJECT_BUILD_INI_DIR
# 打包日志路径
LOG_FILE_PATH=$PROJECT_BUILD_LOG_PATH/$PROJECT_NAME"-"$BRANCH_NAME"-build.log"
BUILD_VERSION_SERIAL_NUMBER_FILE=$PROJECT_BUILD_INI_PATH/$BRANCH_NAME".serial"
# 创建项目打包根路径
if [ ! -d $PROJECT_BUILD_ROOT_PATH ];
then
mkdir $PROJECT_BUILD_ROOT_DIR
fi
if [ ! -d $PROJECT_BUILD_GIT_PATH ];
then
git config --global credential.helper store
if [ $# -ne 2 ]; then
echo "usage:sudo ./auto_build.sh [branch] [gitUrl]"
exit 0
fi
echo "克隆项目"$PROJECT_NAME"代码,git 地址:"$GIT_URL
cd $PROJECT_BUILD_ROOT_PATH
git clone -b $BRANCH_NAME $GIT_URL $PROJECT_BUILD_GIT_DIR
else
echo "项目"$PROJECT_NAME"代码目录已经存在,拉取更新指定版本代码……"
cd $PROJECT_BUILD_GIT_PATH
# TODO 切换 branch,并更新代码
git checkout -b $BRANCH_NAME origin/$BRANCH_NAME
git pull
fi
echo "创建项目打包日志目录……"
cd $PROJECT_BUILD_ROOT_PATH
if [ -d $PROJECT_BUILD_LOG_PATH ];
then
rm -rf $PROJECT_BUILD_LOG_DIR
fi
mkdir $PROJECT_BUILD_LOG_DIR
cd $PROJECT_BUILD_GIT_PATH
mvn clean install -Dmaven.test.skip=true | tee -a $LOG_FILE_PATH
if [ `grep -c 'BUILD SUCCESS' $LOG_FILE_PATH` -gt '0' ];
then
echo "打包成功!"
else
echo "打包失败!退出,请查看日志,日志路径"$LOG_FILE_PATH
exit 0
fi
cd $PROJECT_BUILD_ROOT_PATH
# 创建项目打包配置文件目录
if [ ! -d $PROJECT_BUILD_INI_PATH ];
then
mkdir $PROJECT_BUILD_INI_DIR
fi
echo "读取指定版本的第四位版本号。"
# 创建项目打包版本第四位序列号文件
if [ ! -f $BUILD_VERSION_SERIAL_NUMBER_FILE ];
then
touch $BUILD_VERSION_SERIAL_NUMBER_FILE
fi
LAST_SERIAL_NUMBER=`tail -n 1 $BUILD_VERSION_SERIAL_NUMBER_FILE`
if [ ! $LAST_SERIAL_NUMBER ];
then
LAST_SERIAL_NUMBER="0"
else
if [[ $i =~ ^[0-9]*$ ]];
then
LAST_SERIAL_NUMBER=`expr $LAST_SERIAL_NUMBER + 1`
else
rm -f $BUILD_VERSION_SERIAL_NUMBER_FILE
LAST_SERIAL_NUMBER="0"
fi
fi
echo $LAST_SERIAL_NUMBER >> $BUILD_VERSION_SERIAL_NUMBER_FILE
# 创建项目包存储目录
if [ ! -d $PROJECT_BUILD_WAR_PATH ];
then
mkdir $PROJECT_BUILD_WAR_DIR
fi
cd $PROJECT_BUILD_WAR_PATH
VERSION_SERIAL_WAR_DIR=$BRANCH_NAME"."$LAST_SERIAL_NUMBER
if [ -d $PROJECT_BUILD_WAR_PATH/$VERSION_SERIAL_WAR_DIR ];
then
rm -rf $VERSION_SERIAL_WAR_DIR
fi
mkdir $VERSION_SERIAL_WAR_DIR
echo "拷贝包到项目包存储目录."
cp $PROJECT_BUILD_GIT_PATH/"target/"$PROJECT_NAME".war" $PROJECT_BUILD_WAR_PATH/$VERSION_SERIAL_WAR_DIR
相关推荐
通过Shell脚本,结合Git实现增量部署基于Maven的Java项目
shell-tomcat-git-maven使用Shell 脚本,部署Tomcat参考资料:#大致步骤:0. 手工初始化项目<git>更新代码<git>打包杀掉Tomcat 进程备份旧war包部署新war包启动Tomcat<./bin/startup.sh>
docker项目自动git拉取自动发布shell脚本
genius:一个基于shell结合git,maven,tomcat的发布脚本
该脚本提供了与Maven发布脚本类似的功能,但可以与git很好地配合使用。 我之所以创建脚本是因为要使Maven发行插件按我想要的方式工作意味着要保留Maven 2.0版本并且不使用并发构建。 这是一个巨大的痛苦。 用法 ...
发布 交互式bash脚本中Git和Maven的快捷方式 用法 只需从Maven和git仓库运行此脚本 您必须具有以下有效设置: 吉特 MVN ip 您可以使用shellcheck来验证此脚本
在阿里云CentOS 6.5 java开发集成环境下部署,利用到Git和Maven进行自动化部署,git换成SVN也类似。
Docker Maven版本使用git,maven和gpg预先设置的docker映像以及用于触发bot释放的脚本支持的功能GPG签名SSH git repo身份验证与Bot用户进行交流增加主要版本,次要版本或补丁版本如果mvn准备失败,则回滚释放。...
我们可以使用手动部署或者自动部署两种方式来发布项目 ...在Linux中使用Shell脚本自动部署项目大概有以下5个步骤 1.在Linux中安装Git 使用yum list git命令列出git在线安装包,再输入yum install git来在线安装git
其次,对于运维人员来说需要清楚的认识到点击构建后整个的流程(Jenkins构建-->git拉取代码-->maven打包-->docker构建容器-->shell脚本部署),方便在开发人员构建不成功的时候帮助其排查问题,保证服务的稳定性。
公司的项目一直手动maven打包、上传服务器、关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动部署,那更省时省力。 下面是一个...
由于无法构建JBoss EAP 6+,我制作了一个脚本,可以下载JBoss EAP 6+的源代码,修补存储库并使用JBoss Maven存储库启动构建。 结果并非完全是JBoss EAP二进制文件,而是有些不同。 如何 ? 您可以使用git或wget...
GIT(建议关闭git的autoclrf,以免linux下运行shell脚本的时候由于格式错误无法运行脚本) BUILD 先打包一个apache-rocketmq.tar.gz git clone git@github.com:apache/rocketmq.git cd rocketmq # rocketmq-all-4.1.0-...
它具有两个将在下面的活动中执行的shell脚本。 基础架构创建阶段:创建EC2实例(使用AWS CLI) 软件配置阶段:为Tomcat和MySQL配置必需的软件包 应用程序构建阶段:构建Java应用程序(使用maven作为构建工具) ...
在Ubuntu 16.04 LTS...Jenkins支持SCM工具,包括AccuRev、CVS、Subversion、Git、Mercurial、Perforce、Clearcase和RTC等,可以只需基于Apache Ant或Apache Maven的项目,以及任意Shell脚本或Windows批处理命令。 1
Java 8、11,Maven,NodeJS,Docker,Docker Compose,Minikube,Miniconda,Jupyter Notebook / JupyterLab默认配置,zsh,带有powerlevel10k主题的OhMyZsh和一些非常有用的扩展,AWS cli v1,git,broot,fd-find...
它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。 war 包可直接运行...
使用Maven插件和Shell脚本/命令行工具可重复使用代码 贡献 为什么我们需要一种工具来管理Apigee的API开发生命周期? 可插拔环境(数千个npm和grunt模块和插件) Grunt非常适合通过轻松添加自定义任务来进行持续...
Kotlin语言交互式外壳 该外壳是Kotlin REPL的可扩展实现,具有一系列功能,包括: 语法高亮类型推断命令使用Maven坐标在运行时下载依赖项列出声明的符号历史该项目是将以前的Sparklin Shell迁移到新的Kotlin脚本和...
它支持软件配置管理(SCM)工具(包括AccuRevSCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于ApacheAnt和ApacheMaven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是...