cmdbox_push
CmdBox 自动部署并推送至 GitHub
一键脚本
bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/cmdbox_push.sh) /home/mobufan/桌面/cmdbox-main /home/mobufan/桌面/cmdbox
bash <(curl -sL ../sh/cmdbox_push.sh) /home/mobufan/桌面/cmdbox-main /home/mobufan/桌面/cmdbox
| 模式 | 命令 | 说明 |
|---|---|---|
| 不传参 | 脚本.sh |
使用默认源码目录和目标目录 |
| 传源码目录 | 脚本.sh /path/to/source |
仅指定源码目录,目标目录使用默认值 |
| 传两个参数 | 脚本.sh /源码 /目标 |
同时指定源码目录和目标目录 |
效果预览
补充说明
该脚本用于 CmdBox 项目的自动构建、部署与 Git 推送一站式流程。从源码目录构建项目,将构建产物复制到目标仓库目录,最后自动推送到远程仓库。
功能特点
- 自动检查 Node.js 和 npm 环境,缺失则自动安装
- 一键执行
npm install+npm run build完整构建流程 - 自动清理目标目录旧文件,再复制新构建产物
- 集成 Git 自动推送功能,部署后直接推送到远程仓库
- 支持命令行传参指定源码目录和目标目录
- 全程彩色日志输出,操作状态清晰可见
工作流程
源码目录 (cmdbox-main)
↓
npm install && npm run build
↓
.deploy/ 构建产物
↓ 复制
目标目录 (cmdbox)
↓
Git 推送至远程仓库
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| 第1个参数(源码目录) | /home/mobufan/桌面/cmdbox-main |
存放源码的项目目录 |
| 第2个参数(目标目录) | /home/mobufan/桌面/cmdbox |
部署静态页面的仓库目录 |
输出说明
脚本输出包含以下字段:
| 字段 | 说明 |
|---|---|
| 部署标题 | 显示 CmdBox 自动部署工具 |
| 源码仓库 | 显示源码目录路径 |
| 项目仓库 | 显示目标目录路径 |
| Node 环境检查 | 检查并自动安装 Node.js 和 npm |
| 项目构建 | 执行 npm install 和 npm run build 的结果 |
| 旧文件清理 | 删除目标目录中的旧静态文件 |
| 文件复制 | 从 .deploy 复制构建产物到目标目录 |
| Git 推送 | 执行远程仓库推送的结果 |
注意事项
- 脚本需要 root 权限来安装 Node.js 和 npm
- 默认路径为
/home/mobufan/桌面/cmdbox-main和/home/mobufan/桌面/cmdbox,请根据实际路径传参 - 目标目录必须是一个 Git 仓库,否则推送会失败
- 构建产物目录为源码目录下的
.deploy - 清理操作会删除目标目录的以下内容:
404.html、all.html、c/、contributors.html、css/、hot.html、img/、index.html、js/、list.html、script-list.html
脚本源码
#!/bin/bash
set -e
list_color_init() {
export gl_hui=$'\033[38;5;59m'
export gl_hong=$'\033[38;5;9m'
export gl_lv=$'\033[38;5;10m'
export gl_huang=$'\033[38;5;11m'
export gl_lan=$'\033[38;5;32m'
export gl_bai=$'\033[38;5;15m'
export gl_zi=$'\033[38;5;13m'
export gl_bufan=$'\033[38;5;14m'
export reset=$'\033[0m'
}
list_color_init
log_info() { echo -e "${gl_lan}[信息]${gl_bai} $*"; }
log_ok() { echo -e "${gl_lv}[成功]${gl_bai} $*"; }
log_error() { echo -e "${gl_hong}[错误]${gl_bai} $*" >&2; }
root_use() {
clear
if [ "$EUID" -ne 0 ]; then
echo -e "\n${gl_zi}>>> ROOT登录检查${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
return 1
fi
return 0
}
break_end() {
echo -e "${gl_lv}操作完成${gl_bai}"
echo -e "${gl_bai}按任意键继续${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai} \c"
read -r -n 1 -s -p ""
echo ""
clear
}
sleep_fractional() {
local seconds=$1
if sleep "$seconds" 2>/dev/null; then return 0; fi
if command -v python3 >/dev/null 2>&1; then python3 -c "import time; time.sleep($seconds)"; return 0; fi
sleep "$seconds"
}
# ==============================================
# 接收命令行参数:第1个参数=源码目录,第2个参数=目标目录
# 不传参则使用默认路径
# ==============================================
SOURCE_DIR="${1:-/home/mobufan/桌面/cmdbox-main}"
TARGET_DIR="${2:-/home/mobufan/桌面/cmdbox}"
GIT_PUSH_URL="https://gitee.com/meimolihan/cmdbox/raw/master/sh/git_push.sh"
clear
root_use
echo -e "${gl_zi}>>> CmdBox 自动部署工具${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
echo -e " ${gl_bai}源码仓库:${gl_huang}${SOURCE_DIR} ${gl_bai} "
echo -e " ${gl_bai}项目仓库:${gl_lv}${TARGET_DIR}${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
if command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
log_info "Node.js & npm 已安装,跳过安装步骤"
else
log_info "开始安装 Node.js & npm 依赖"
sudo apt update -y
sudo apt install -y nodejs npm
log_ok "Node 环境安装完成"
fi
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
log_info "进入项目目录:${gl_huang}$SOURCE_DIR${gl_bai}"
cd "${SOURCE_DIR}" || {
log_error "源码目录不存在,部署终止"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
exit 1
}
log_info "执行项目构建:${gl_lv}npm install${gl_bai} && ${gl_lv}npm run build${gl_bai}"
npm install
npm run build
log_ok "项目构建完成"
echo -e ""
echo -e "${gl_huang}>>> 清理目标目录旧文件${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
cd "${TARGET_DIR}" || {
log_error "目标目录不存在,部署终止"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
exit 1
}
rm -rf 404.html all.html c contributors.html css hot.html img index.html js list.html script-list.html
log_ok "旧文件清理完成"
echo -e ""
echo -e "${gl_huang}>>> 复制新构建产物${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
cd "${SOURCE_DIR}/.deploy"
cp -r ./* "${TARGET_DIR}/"
log_ok "文件复制完成"
echo -e ""
echo -e "${gl_huang}>>> 执行 Git 自动推送${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
bash <(curl -sL "${GIT_PUSH_URL}") "${TARGET_DIR}"
创建本地脚本
new_script="new_test.sh"
cat > "$new_script" << 'EOF'
#!/bin/bash
# 粘贴脚本源码
EOF
# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"