🧰 添加测试与生产部署脚本
This commit is contained in:
Executable
+78
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO_DIR="${REPO_DIR:-/opt/src/filecodebox}"
|
||||
TEST_DIR="${TEST_DIR:-/opt/1panel/apps/filecodebox/filecodebox-test}"
|
||||
PROD_DIR="${PROD_DIR:-/opt/1panel/apps/filecodebox/filecodebox}"
|
||||
BRANCH="${BRANCH:-test/custom-admin-ui}"
|
||||
IMAGE="${IMAGE:-local/filecodebox:test-custom-admin-ui}"
|
||||
PORT="${PORT:-40158}"
|
||||
COPY_PROD_DATA="${COPY_PROD_DATA:-0}"
|
||||
|
||||
log() { printf '\033[1;34m[deploy-test]\033[0m %s\n' "$*"; }
|
||||
err() { printf '\033[1;31m[deploy-test]\033[0m %s\n' "$*" >&2; }
|
||||
|
||||
require_cmd() {
|
||||
command -v "$1" >/dev/null 2>&1 || { err "missing command: $1"; exit 1; }
|
||||
}
|
||||
|
||||
require_cmd git
|
||||
require_cmd docker
|
||||
require_cmd curl
|
||||
|
||||
log "repo: $REPO_DIR"
|
||||
cd "$REPO_DIR"
|
||||
|
||||
current_branch="$(git rev-parse --abbrev-ref HEAD)"
|
||||
if [[ "$current_branch" != "$BRANCH" ]]; then
|
||||
err "当前分支是 $current_branch,不是 $BRANCH。请先切到测试分支:git checkout $BRANCH"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if ! git diff --quiet || ! git diff --cached --quiet; then
|
||||
log "检测到未提交改动:会用当前工作区内容构建测试镜像"
|
||||
fi
|
||||
|
||||
log "sync test deployment directory"
|
||||
mkdir -p "$TEST_DIR/custom" "$TEST_DIR/data"
|
||||
cp -a deploy/1panel/current-app/custom/fcb_extra_patch.py "$TEST_DIR/custom/fcb_extra_patch.py"
|
||||
cp -a deploy/1panel/test-env/Dockerfile "$TEST_DIR/custom/Dockerfile"
|
||||
cp -a deploy/1panel/test-env/docker-compose.yml "$TEST_DIR/docker-compose.yml"
|
||||
|
||||
if [[ "$COPY_PROD_DATA" == "1" ]]; then
|
||||
log "refresh test data from production copy"
|
||||
mkdir -p "$TEST_DIR/backups"
|
||||
if [[ -f "$TEST_DIR/data/filecodebox.db" ]]; then
|
||||
cp -a "$TEST_DIR/data/filecodebox.db" "$TEST_DIR/backups/filecodebox.db.before-refresh.$(date +%Y%m%d%H%M%S)"
|
||||
fi
|
||||
rsync -a --delete "$PROD_DIR/data/" "$TEST_DIR/data/"
|
||||
fi
|
||||
|
||||
log "build $IMAGE"
|
||||
cd "$TEST_DIR"
|
||||
docker compose build filecodebox-test
|
||||
|
||||
log "start/recreate test container"
|
||||
docker compose up -d --no-build filecodebox-test
|
||||
|
||||
log "wait for http://127.0.0.1:$PORT/"
|
||||
for i in $(seq 1 30); do
|
||||
if curl -fsS "http://127.0.0.1:$PORT/" >/tmp/filecodebox-test-index.html; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
if [[ "$i" == "30" ]]; then
|
||||
err "test environment did not become ready"
|
||||
docker logs --tail 80 filecodebox-test || true
|
||||
exit 3
|
||||
fi
|
||||
done
|
||||
|
||||
log "verify custom asset"
|
||||
if ! grep -q 'fcb-analytics.js' /tmp/filecodebox-test-index.html; then
|
||||
err "测试环境没有加载 fcb-analytics.js,部署异常"
|
||||
exit 4
|
||||
fi
|
||||
|
||||
docker ps --filter name=filecodebox-test --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
|
||||
log "OK: test environment is ready at http://127.0.0.1:$PORT/"
|
||||
Reference in New Issue
Block a user