#!/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项目的增量部署。 首先,让我们理解核心组件的作用: 1. **Git**:这是一个分布式版本控制系统,用于跟踪对代码库的修改。在增量部署过程中,Git帮助我们...
然后,我们可以使用 Git 进行版本控制,Maven 进行项目构建,Shell 自定义脚本来控制集成部署环境,最后使用 Tomcat 作为发布服务器。 首先,我们需要安装 Java JDK,以便于后续的操作。下载相应的 JDK 软件包,...
"手把手图解,详解Jenkins,svn,maven项目持续集成SHELL脚本"这个标题表明了本文将通过图形化的解释,详细介绍如何使用Jenkins、Subversion(svn)和Maven这三个工具来实现软件项目的持续集成,并涉及到使用SHELL脚...
IDEA中编写并运行shell脚本的实现需要安装bashsupport插件,配置插件,安装git软件,配置IDEA环境,创建Bash Script文件,设置脚本文件的换行符和文件编码,运行脚本等步骤。同时,也需要注意控制台的编码设置和脚本...
shell-tomcat-git-maven使用Shell 脚本,部署Tomcat参考资料:#大致步骤:0. 手工初始化项目<git>更新代码<git>打包杀掉Tomcat 进程备份旧war包部署新war包启动Tomcat<./bin/startup.sh>
2. **Shell**:Shell脚本是Linux或Unix系统中的命令行解释器,可以编写一系列命令来执行自动化任务。genius脚本就是用Shell编写,它封装了一系列操作,如克隆代码、构建应用、打包、启动和停止服务等。 3. **Maven*...
docker项目自动git拉取自动发布shell脚本
在这个场景中,我们有两个关键文件:`runjar.sh`和`build.sh`,它们是实现Spring Boot应用自动化发布的shell脚本。 首先,让我们详细了解一下`build.sh`脚本。这个脚本通常用于构建项目,它可能包含了编译源代码、...
该脚本提供了与Maven发布脚本类似的功能,但可以与git很好地配合使用。 我之所以创建脚本是因为要使Maven发行插件按我想要的方式工作意味着要保留Maven 2.0版本并且不使用并发构建。 这是一个巨大的痛苦。 用法 ...
`1024_shell脚本一键部署.zip`这个压缩包提供了一套基于Linux Shell脚本的自动化部署解决方案,特别针对Java项目,尤其是Spring Boot应用。Shell脚本是一种强大的工具,它允许用户通过命令行与操作系统进行交互,...
该B-ultrasound检测系统源码整合了Java和Shell脚本,共包含65个文件,其中Java源文件占50个,XML配置文件4个,YAML配置文件3个,Shell脚本2个,其他文件包括Git忽略文件、JAR包、属性文件、Markdown文档、Maven构建...
该项目是针对maven构建工具的lodsve插件设计源码,由31个文件组成,其中包含6个Java源文件、6个XML配置文件、5个Shell脚本文件、3个Markdown文件、3个Shell脚本文件,以及相应的编辑器配置、Git相关文件和属性文件等...
也可以编写shell脚本手动完成这个过程,包括停止Tomcat、复制WAR文件到webapps目录、启动Tomcat等。 5. **监控和优化**:为了确保自动化流程的稳定性和效率,需要监控Jenkins和Gitlab的日志,及时发现并解决问题。...
我们的自动化编译Shell脚本旨在将手动编译过程转化为一键式的操作,为开发团队带来前所未有的便利。手动编译不仅耗时,而且容易出错,尤其是在大型项目中。通过这个脚本,我们希望简化开发流程,让开发者能够更专注...
通过这个交互式自动部署Shell脚本,你可以快速在 CentOS 7.9 环境中部署 Seata,实现分布式事务管理,从而提升你的应用系统的稳定性和可靠性。在实际使用中,根据具体的业务场景和性能需求,你可能还需要对 Seata 的...
2. **源代码管理**:使用版本控制系统(如Git)来管理源代码,确保每次打包都基于最新的代码版本。在脚本中,可能需要拉取或者检出特定分支的代码。 3. **构建过程**:Shell脚本会调用对应的构建工具来编译代码,这...
它包含59个文件,其中48个Java源文件、2个Git忽略文件、1个LICENSE文件、1个Markdown文档、1个用于运行Maven的shell脚本、1个命令脚本、1个XML配置文件、1个工厂配置文件和1个YAML配置文件。Easy Log旨在简化日志...
该工具集包含61个文件,其中Markdown文件22个,XML文件6个,YAML文件5个,配置文件5个,批处理文件2个,PowerShell脚本2个,Shell脚本2个,Jupyter笔记本2个,Git忽略文件1个,以及JAR包文件1个。该项目涵盖了Maven...
Docker Maven版本使用git,maven和gpg预先设置的docker映像以及用于触发bot释放的脚本支持的功能GPG签名SSH git repo身份验证与Bot用户进行交流增加主要版本,次要版本或补丁版本如果mvn准备失败,则回滚释放。...
3. **自动化构建**:使用`git clone`命令可以从GitHub仓库克隆代码,然后使用构建工具(如maven、gradle)进行编译和打包,确保新提交的代码能正确构建。 4. **版本管理**:通过`git tag`命令,脚本可以自动为新...