`

基于 git、maven,通过 shell 脚本打包

阅读更多

#!/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项目.zip

    本文将详细探讨如何通过Shell脚本和Git实现基于Maven的Java项目的增量部署。 首先,让我们理解核心组件的作用: 1. **Git**:这是一个分布式版本控制系统,用于跟踪对代码库的修改。在增量部署过程中,Git帮助我们...

    Jenkins+Git+Maven+Shell+Tomcat持续集成环境

    然后,我们可以使用 Git 进行版本控制,Maven 进行项目构建,Shell 自定义脚本来控制集成部署环境,最后使用 Tomcat 作为发布服务器。 首先,我们需要安装 Java JDK,以便于后续的操作。下载相应的 JDK 软件包,...

    手把手图解,详解Jenkins ,svn ,maven 项目持续集成 SHELL 脚本

    "手把手图解,详解Jenkins,svn,maven项目持续集成SHELL脚本"这个标题表明了本文将通过图形化的解释,详细介绍如何使用Jenkins、Subversion(svn)和Maven这三个工具来实现软件项目的持续集成,并涉及到使用SHELL脚...

    IDEA中编写并运行shell脚本的实现

    IDEA中编写并运行shell脚本的实现需要安装bashsupport插件,配置插件,安装git软件,配置IDEA环境,创建Bash Script文件,设置脚本文件的换行符和文件编码,运行脚本等步骤。同时,也需要注意控制台的编码设置和脚本...

    shell-tomcat-git-maven:使用Shell 脚本,部署Tomcat

    shell-tomcat-git-maven使用Shell 脚本,部署Tomcat参考资料:#大致步骤:0. 手工初始化项目<git>更新代码<git>打包杀掉Tomcat 进程备份旧war包部署新war包启动Tomcat<./bin/startup.sh>

    genius:一个基于shell结合git,maven,tomcat的发布脚本

    2. **Shell**:Shell脚本是Linux或Unix系统中的命令行解释器,可以编写一系列命令来执行自动化任务。genius脚本就是用Shell编写,它封装了一系列操作,如克隆代码、构建应用、打包、启动和停止服务等。 3. **Maven*...

    docker项目自动git拉取自动发布shell脚本

    docker项目自动git拉取自动发布shell脚本

    sringboot项目自动化发布shell脚本

    在这个场景中,我们有两个关键文件:`runjar.sh`和`build.sh`,它们是实现Spring Boot应用自动化发布的shell脚本。 首先,让我们详细了解一下`build.sh`脚本。这个脚本通常用于构建项目,它可能包含了编译源代码、...

    maven-release-script:git的Maven发布脚本比Maven发布插件要糟糕

    该脚本提供了与Maven发布脚本类似的功能,但可以与git很好地配合使用。 我之所以创建脚本是因为要使Maven发行插件按我想要的方式工作意味着要保留Maven 2.0版本并且不使用并发构建。 这是一个巨大的痛苦。 用法 ...

    1024_shell脚本一键部署.zip

    `1024_shell脚本一键部署.zip`这个压缩包提供了一套基于Linux Shell脚本的自动化部署解决方案,特别针对Java项目,尤其是Spring Boot应用。Shell脚本是一种强大的工具,它允许用户通过命令行与操作系统进行交互,...

    基于Java和Shell脚本集成的B-ultrasound检测系统设计源码

    该B-ultrasound检测系统源码整合了Java和Shell脚本,共包含65个文件,其中Java源文件占50个,XML配置文件4个,YAML配置文件3个,Shell脚本2个,其他文件包括Git忽略文件、JAR包、属性文件、Markdown文档、Maven构建...

    基于Java和Shell的lodsve-maven-plugins设计源码

    该项目是针对maven构建工具的lodsve插件设计源码,由31个文件组成,其中包含6个Java源文件、6个XML配置文件、5个Shell脚本文件、3个Markdown文件、3个Shell脚本文件,以及相应的编辑器配置、Git相关文件和属性文件等...

    Java项目包 Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    也可以编写shell脚本手动完成这个过程,包括停止Tomcat、复制WAR文件到webapps目录、启动Tomcat等。 5. **监控和优化**:为了确保自动化流程的稳定性和效率,需要监控Jenkins和Gitlab的日志,及时发现并解决问题。...

    OTA一键打包脚本(shell)

    我们的自动化编译Shell脚本旨在将手动编译过程转化为一键式的操作,为开发团队带来前所未有的便利。手动编译不仅耗时,而且容易出错,尤其是在大型项目中。通过这个脚本,我们希望简化开发流程,让开发者能够更专注...

    seata-1.5.1 交互式自动部署Shell脚本

    通过这个交互式自动部署Shell脚本,你可以快速在 CentOS 7.9 环境中部署 Seata,实现分布式事务管理,从而提升你的应用系统的稳定性和可靠性。在实际使用中,根据具体的业务场景和性能需求,你可能还需要对 Seata 的...

    自动打包代码shell

    2. **源代码管理**:使用版本控制系统(如Git)来管理源代码,确保每次打包都基于最新的代码版本。在脚本中,可能需要拉取或者检出特定分支的代码。 3. **构建过程**:Shell脚本会调用对应的构建工具来编译代码,这...

    基于Spring Boot 2.6.7的轻量级日志脚手架EasyLog设计源码

    它包含59个文件,其中48个Java源文件、2个Git忽略文件、1个LICENSE文件、1个Markdown文档、1个用于运行Maven的shell脚本、1个命令脚本、1个XML配置文件、1个工厂配置文件和1个YAML配置文件。Easy Log旨在简化日志...

    基于Python和Shell语言的构建工具集设计源码

    该工具集包含61个文件,其中Markdown文件22个,XML文件6个,YAML文件5个,配置文件5个,批处理文件2个,PowerShell脚本2个,Shell脚本2个,Jupyter笔记本2个,Git忽略文件1个,以及JAR包文件1个。该项目涵盖了Maven...

    docker-maven-release:带有maven git和gpg2的Docker映像以及触发发布的脚本

    Docker Maven版本使用git,maven和gpg预先设置的docker映像以及用于触发bot释放的脚本支持的功能GPG签名SSH git repo身份验证与Bot用户进行交流增加主要版本,次要版本或补丁版本如果mvn准备失败,则回滚释放。...

    Github-Automation:此仓库通过Shell脚本处理了github上的自动化任务

    3. **自动化构建**:使用`git clone`命令可以从GitHub仓库克隆代码,然后使用构建工具(如maven、gradle)进行编译和打包,确保新提交的代码能正确构建。 4. **版本管理**:通过`git tag`命令,脚本可以自动为新...

Global site tag (gtag.js) - Google Analytics