diff --git a/docs/technical/JENKINS_RUST_BUILD_DEPLOY_PIPELINES_2026-04-23.md b/docs/technical/JENKINS_RUST_BUILD_DEPLOY_PIPELINES_2026-04-23.md index d653c97d..51f10fbd 100644 --- a/docs/technical/JENKINS_RUST_BUILD_DEPLOY_PIPELINES_2026-04-23.md +++ b/docs/technical/JENKINS_RUST_BUILD_DEPLOY_PIPELINES_2026-04-23.md @@ -95,7 +95,7 @@ scripts/jenkins-deploy-release.sh \ 1. 若部署目录已有旧版本且存在 `stop.sh`,先执行旧版本 `stop.sh`。 2. 只删除发布产物白名单中的旧文件,例如 `web/`、`api-server`、`spacetime_module.wasm`、`.env*`、`start.sh`、`stop.sh`、`web-server.mjs`、`README.md`。 -3. 将指定版本目录中的同名发布产物移动到部署目录。 +3. 将指定版本目录中的同名发布产物复制到部署目录;文件产物使用普通复制,`web/` 等目录产物必须递归复制。 4. 如果 `CLEAR_DATABASE=true`,部署脚本会以 `./start.sh --clear-database` 启动新版本;这样发布阶段的 `spacetime publish` 会追加 `-c=on-conflict`。 5. 执行新版本 `start.sh`。 diff --git a/docs/technical/RUST_LOCAL_AND_REMOTE_DEPLOYMENT_SCRIPTS_2026-04-22.md b/docs/technical/RUST_LOCAL_AND_REMOTE_DEPLOYMENT_SCRIPTS_2026-04-22.md index fd67f88f..db0442d3 100644 --- a/docs/technical/RUST_LOCAL_AND_REMOTE_DEPLOYMENT_SCRIPTS_2026-04-22.md +++ b/docs/technical/RUST_LOCAL_AND_REMOTE_DEPLOYMENT_SCRIPTS_2026-04-22.md @@ -178,7 +178,7 @@ cd build/ ./stop.sh ``` -如果后续通过 Jenkins 的部署脚本把发布包覆盖到固定部署目录,部署阶段默认只替换 `web/`、`api-server`、`spacetime_module.wasm`、`.env*`、`start.sh`、`stop.sh`、`web-server.mjs`、`README.md` 等发布产物,不会删除部署目录中的 `.spacetimedb/`、`logs/`、`run/` 这类运行态目录。 +如果后续通过 Jenkins 的部署脚本把发布包覆盖到固定部署目录,部署阶段默认只替换 `web/`、`api-server`、`spacetime_module.wasm`、`.env*`、`start.sh`、`stop.sh`、`web-server.mjs`、`README.md` 等发布产物;文件产物使用普通复制,`web/` 等目录产物递归复制,不会删除部署目录中的 `.spacetimedb/`、`logs/`、`run/` 这类运行态目录。 安全边界: diff --git a/scripts/jenkins-deploy-release.sh b/scripts/jenkins-deploy-release.sh index 89453140..9fdc7032 100644 --- a/scripts/jenkins-deploy-release.sh +++ b/scripts/jenkins-deploy-release.sh @@ -9,8 +9,8 @@ usage() { 说明: 1. 如果部署目录已有旧版本且存在 stop.sh,则先执行旧版本 stop.sh。 - 2. 仅删除并替换发布产物文件,保留部署目录中的运行数据目录。 - 3. 把指定发布目录中的内容覆盖到部署目录。 + 2. 仅删除并替换发布产物文件或目录,保留部署目录中的运行数据目录。 + 3. 把指定发布目录中的白名单产物复制覆盖到部署目录。 4. 如指定 --clear-database,则以清库模式执行新版本 start.sh。 5. 最后执行新版本 start.sh。 @@ -219,11 +219,17 @@ for item in "${DEPLOY_ITEMS[@]}"; do fi done -echo "[jenkins-deploy] 移动发布内容: ${SOURCE_DIR} -> ${DEPLOY_DIR}" +echo "[jenkins-deploy] 复制发布内容: ${SOURCE_DIR} -> ${DEPLOY_DIR}" for item in "${DEPLOY_ITEMS[@]}"; do - if [[ -e "${SOURCE_DIR}/${item}" ]]; then + source_item="${SOURCE_DIR}/${item}" + if [[ -e "${source_item}" ]]; then echo "[jenkins-deploy] 覆盖产物: ${item}" - cp "${SOURCE_DIR}/${item}" "${DEPLOY_DIR}/" + # web 是目录产物,必须递归复制;文件产物保持普通复制,避免误扩大复制语义。 + if [[ -d "${source_item}" ]]; then + cp -R "${source_item}" "${DEPLOY_DIR}/" + else + cp "${source_item}" "${DEPLOY_DIR}/" + fi fi done