Last active
April 24, 2022 07:30
-
-
Save imyelo/418145264face5d5caab27e3b714607b to your computer and use it in GitHub Desktop.
Deployment Activate Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# --- | |
# 部署构件激活脚本 | |
# Author: yelo <[email protected]> | |
# --- | |
## 项目主目录 | |
PROJECT_DIR=$(pwd) | |
## 上传目录 | |
UPLOADS_DIR="$PROJECT_DIR/uploads" | |
## 存档目录 | |
ARCHIVES_DIR="$PROJECT_DIR/archives" | |
## 入口目录 | |
ENTRIES_DIR="$PROJECT_DIR/entries" | |
## 构件物压缩包文件名 | |
TAR_FILENAME="dist.tar.gz" | |
## 构件物压缩包存放路径 | |
TAR_FULLPATH="$UPLOADS_DIR/$TAR_FILENAME" | |
## 构件物压缩临时目录 | |
UNTAR_TMP_DIR="$PROJECT_DIR/.untar" | |
## 入口名 | |
if [ -d $ENTRY_NAME ]; then | |
ENTRY_NAME="current" | |
fi | |
## 完整的入口路径 | |
ENTRY_FULLPATH="$ENTRIES_DIR/$ENTRY_NAME" | |
## 存档名随机后缀的字符范围 | |
ARCHIVE_NAME_SUFFIX_RANDOM_CHARS="a-z0-9" | |
## 生成版本号 | |
function generate_archive_name() { | |
echo "$(date '+%Y%m%d_%H%M%S')_$( | |
LC_CTYPE=C head /dev/urandom | LC_CTYPE=C tr -dc $ARCHIVE_NAME_SUFFIX_RANDOM_CHARS | head -c 11 | |
echo "" | |
)" | |
} | |
## 激活新构件 | |
function activate_upcoming() { | |
### 版本号 (规则: 日期_时间_随机字符串) | |
if [ -d $ARCHIVE_NAME ]; then | |
ARCHIVE_NAME="$(generate_archive_name)" | |
fi | |
### 环境检查 | |
if [ ! -f "$TAR_FULLPATH" ]; then | |
echo -e "\n[ 激活失败 ] 构件物压缩包不存在,期望文件: $TAR_FULLPATH" | |
exit 1 | |
fi | |
echo -e "\n[ 准备激活 ] 存档版本号:$ARCHIVE_NAME" | |
if [ -d "$ARCHIVES_DIR/$ARCHIVE_NAME" ]; then | |
echo -e "\n[ 激活失败 ] 存档版本已经存在,请重新执行命令" | |
exit 1 | |
fi | |
### 准备存档目录 | |
mkdir -p "$ARCHIVES_DIR" | |
### 准备入口目录 | |
mkdir -p "$ENTRIES_DIR" | |
### 解压构件 | |
mkdir -p "$UNTAR_TMP_DIR" | |
tar -zxf "$TAR_FULLPATH" -C "$UNTAR_TMP_DIR" | |
mv "$UNTAR_TMP_DIR" "$ARCHIVES_DIR/$ARCHIVE_NAME" | |
echo -e "\n[ 激活中.. ] 解压构件物成功" | |
### 更新软连接 | |
rm -rf "$ENTRY_FULLPATH" | |
ln -s "$ARCHIVES_DIR/$ARCHIVE_NAME" "$ENTRY_FULLPATH" | |
echo -e "\n[ 激活中.. ] 更新软连接成功" | |
# ### 清理构件物压缩包 | |
rm -rf $PROJECT_DIR/uploads/dist.tar.gz | |
echo -e "\n[ 激活中.. ] 清理构件物压缩包成功" | |
### 打印存档信息 | |
echo -e "\n[ 激活中.. ] 最新文件状态:" | |
cd "$PROJECT_DIR" && echo -e "$PROJECT_DIR/" && tree -L 2 | |
cd "$ENTRY_FULLPATH" && echo -e "$ENTRY_FULLPATH/" && tree | |
echo -e "\n[ 激活完成 ] 当前使用存档版本号: $ARCHIVE_NAME" | |
} | |
## 激活存档 | |
function activate_archive() { | |
### 版本号 | |
ARCHIVE_NAME="$1" | |
### 环境检查 | |
if [ ! -n "$ARCHIVE_NAME" ]; then | |
echo -e "\n[ 激活失败 ] 请指定存档版本号" | |
exit 1 | |
fi | |
echo -e "\n[ 准备激活 ] 存档版本号:$ARCHIVE_NAME" | |
if [ ! -d "$ARCHIVES_DIR/$ARCHIVE_NAME" ]; then | |
echo -e "\n[ 激活失败 ] 回滚存档版本不存在" | |
exit 1 | |
fi | |
### 更新软连接 | |
rm -rf "$ENTRY_FULLPATH" | |
ln -s "$ARCHIVES_DIR/$ARCHIVE_NAME" "$ENTRY_FULLPATH" | |
echo -e "\n[ 激活中.. ] 更新软连接成功" | |
### 打印存档信息 | |
echo -e "\n[ 激活中.. ] 最新文件状态:" | |
cd "$PROJECT_DIR" && echo -e "$PROJECT_DIR/" && tree -L 2 | |
cd "$ENTRY_FULLPATH" && echo -e "$ENTRY_FULLPATH/" && tree | |
echo -e "\n[ 激活完成 ] 当前使用存档版本号: $ARCHIVE_NAME" | |
} | |
function help() { | |
echo -e "" | |
echo -e "Activate.sh\n" | |
echo -e "> 部署构件激活脚本" | |
echo -e "> Author: yelo <[email protected]>" | |
echo -e "\n--------------------\n" | |
echo -e "- 激活新构件 (自动生成存档版本号): ./activate.sh upcoming" | |
echo -e "- 激活新构件 (使用给定的存档版本号): ARCHIVE_NAME=\"20210202.2\" ./activate.sh upcoming" | |
echo -e "\n--------------------\n" | |
echo -e "- 回滚旧存档: ./activate.sh archive ARCHIVE_NAME" | |
echo -e "- 回滚旧存档至指定入口: ENTRY_NAME=\"dev\" ./activate.sh archive ARCHIVE_NAME" | |
echo -e "\n--------------------\n" | |
echo -e "- 生成存档版本号: ./activate.sh generate-archive-name" | |
echo -e "\n--------------------\n" | |
echo -e "" | |
exit | |
} | |
if [ "$1" = "upcoming" ]; then | |
activate_upcoming | |
exit | |
fi | |
if [ "$1" = "archive" ]; then | |
activate_archive $2 | |
exit | |
fi | |
if [ "$1" = "generate-archive-name" ]; then | |
generate_archive_name | |
exit | |
fi | |
if [ "$1" = "help" ]; then | |
help | |
fi | |
echo -e "\n[ 执行失败 ] 未找到命令。" | |
echo -e "\n--------------------\n" | |
help |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment