
springboot应用使用shell脚本打包成部署压缩包(支持xjar)
项目目录结构
如果没有用 xjar,那就没有 xjar.go、app.xjar
app-project
|-deploy/
|-build.sh
|-app-server.sh
|-src/
|-target/
|-app.jar
|-app.xjar
|-xjar.go
...
...
目标目录结构
如果没有用 xjar,那就没有 xjar、app.xjar
app
|-version.txt
|-bin/
|-app-server.sh
|-app.jar
|-app.xjar
|-xjar
|-config/
|-application.yml
|-logs/
|-workspace/
app-server.sh 内容看 java 应用启动脚本
打包脚本 build.sh(xjar 版本)
使用方法:
打包当前操作系统下的 xjar:build.sh
打包 amd64 架构的 linux 下的 xjar:build.sh linux amd64
build.sh
#!/bin/bash
BASE_DIR=`cd "$(dirname "$0")"; pwd`
DIST_DIR_NAME="app-dist"
DIST_DIR_PATH=$BASE_DIR/../target/$DIST_DIR_NAME
if [ -d "$DIST_DIR_PATH" ]; then
rm -rf $DIST_DIR_PATH
fi
cd $BASE_DIR/../target
# 找golang当前所在系统信息
DEFAULT_OS=`go env | grep GOHOSTOS | awk -F '=' '{print $2}'`
DEFAULT_ARCH=`go env | grep GOHOSTARCH | awk -F '=' '{print $2}'`
# linux下go查到的会有单引号,这里得去掉前后单引号
DEFAULT_OS=$(echo "$DEFAULT_OS" | tr -d "'")
DEFAULT_ARCH=$(echo "$DEFAULT_ARCH" | tr -d "'")
OS="$1"
ARCH="$2"
if [ -z "$OS" ]; then
OS="$DEFAULT_OS"
fi
if [ -z "$ARCH" ]; then
ARCH="$DEFAULT_ARCH"
fi
echo "编译xjar..."
export GOOS=$OS
export GOARCH=$ARCH
go build ./xjar.go
mkdir -p $DIST_DIR_PATH/bin $DIST_DIR_PATH/config $DIST_DIR_PATH/workspace
if [[ "$OS" == "windows" ]]; then
cp ./xjar.exe $DIST_DIR_PATH/bin/xjar.exe
else
cp ./xjar $DIST_DIR_PATH/bin/xjar
chmod 755 $DIST_DIR_PATH/bin/xjar
fi
cp ./*.jar $DIST_DIR_PATH/bin/
cp ./*.xjar $DIST_DIR_PATH/bin/
cp ../deploy/app-server.sh $DIST_DIR_PATH/bin/
chmod 755 $DIST_DIR_PATH/bin/app-server.sh
cp ../src/main/resources/application.yml $DIST_DIR_PATH/config/application.yml
# 将当前git分支信息填入 version.txt
BRANCH_NAME=$(git branch --show-current)
COMMIT_HASH=$(git rev-parse --short HEAD)
COMMIT_TIME=$(git show -s --format=%ci HEAD)
CURRENT_TAG=$(git describe --tags --exact-match)
RET=$?
COMMIT_INFO=$COMMIT_HASH
if [ $RET -eq 0 ]; then
COMMIT_INFO=$CURRENT_TAG
else
CURRENT_TAG=""
fi
echo "os: $OS" > $DIST_DIR_PATH/version.txt
echo "arch: $ARCH" >> $DIST_DIR_PATH/version.txt
echo "branch_name: $BRANCH_NAME" >> $DIST_DIR_PATH/version.txt
echo "commit_hash: $COMMIT_HASH" >> $DIST_DIR_PATH/version.txt
echo "current_tag: $CURRENT_TAG" >> $DIST_DIR_PATH/version.txt
echo "commit_time: $COMMIT_TIME" >> $DIST_DIR_PATH/version.txt
echo ""
echo "当前版本信息:"
cat $DIST_DIR_PATH/version.txt
echo ""
echo "打包$DIST_DIR_PATH-$COMMIT_INFO-$OS-$ARCH.tar.gz..."
tar -zcf $DIST_DIR_PATH-$COMMIT_INFO-$OS-$ARCH.tar.gz $DIST_DIR_NAME
echo "打包成功!"
打包脚本 build.sh(非 xjar 版本)
build.sh
#!/bin/bash
BASE_DIR=`cd "$(dirname "$0")"; pwd`
DIST_DIR_NAME="app-dist"
DIST_DIR_PATH=$BASE_DIR/../target/$DIST_DIR_NAME
if [ -d "$DIST_DIR_PATH" ]; then
rm -rf $DIST_DIR_PATH
fi
cd $BASE_DIR/../target
mkdir -p $DIST_DIR_PATH/bin $DIST_DIR_PATH/config $DIST_DIR_PATH/workspace
cp ./*.jar $DIST_DIR_PATH/bin/
cp ../deploy/app-server.sh $DIST_DIR_PATH/bin/
chmod 755 $DIST_DIR_PATH/bin/app-server.sh
cp ../src/main/resources/application.yml $DIST_DIR_PATH/config/application.yml
# 将当前git分支信息填入 version.txt
BRANCH_NAME=$(git branch --show-current)
COMMIT_HASH=$(git rev-parse --short HEAD)
COMMIT_TIME=$(git show -s --format=%ci HEAD)
CURRENT_TAG=$(git describe --tags --exact-match)
RET=$?
COMMIT_INFO=$COMMIT_HASH
if [ $RET -eq 0 ]; then
COMMIT_INFO=$CURRENT_TAG
else
CURRENT_TAG=""
fi
echo "branch_name: $BRANCH_NAME" >> $DIST_DIR_PATH/version.txt
echo "commit_hash: $COMMIT_HASH" >> $DIST_DIR_PATH/version.txt
echo "current_tag: $CURRENT_TAG" >> $DIST_DIR_PATH/version.txt
echo "commit_time: $COMMIT_TIME" >> $DIST_DIR_PATH/version.txt
echo ""
echo "当前版本信息:"
cat $DIST_DIR_PATH/version.txt
echo ""
echo "打包$DIST_DIR_PATH-$COMMIT_INFO.tar.gz..."
tar -zcf $DIST_DIR_PATH-$COMMIT_INFO.tar.gz $DIST_DIR_NAME
echo "打包成功!"
本文是原创文章,采用 CC 4.0 BY-SA 协议,完整转载请注明来自 KK元空间
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果