diff --git a/bin/prod/deploy_from_package.sh b/bin/prod/deploy_from_package.sh index 811c5fe..363785c 100755 --- a/bin/prod/deploy_from_package.sh +++ b/bin/prod/deploy_from_package.sh @@ -78,26 +78,26 @@ extract_release_package() { assert_single_jar() { search_dir="$1" - count=$(find "$search_dir" -type f -name '*.jar' | wc -l | tr -d ' ') + count=$(find "$search_dir" -type f -name '*.jar' ! -path '*/__MACOSX/*' ! -name '._*' | wc -l | tr -d ' ') if [ "$count" -ne 1 ]; then log_error "后端 jar 数量不正确,期望 1 个,实际 $count 个" exit 1 fi - find "$search_dir" -type f -name '*.jar' | head -n 1 + find "$search_dir" -type f -name '*.jar' ! -path '*/__MACOSX/*' ! -name '._*' | head -n 1 } assert_single_dist_zip() { search_dir="$1" - count=$(find "$search_dir" -type f -name 'dist.zip' | wc -l | tr -d ' ') + count=$(find "$search_dir" -type f -name 'dist.zip' ! -path '*/__MACOSX/*' ! -name '._*' | wc -l | tr -d ' ') if [ "$count" -ne 1 ]; then log_error "前端 dist.zip 数量不正确,期望 1 个,实际 $count 个" exit 1 fi - find "$search_dir" -type f -name 'dist.zip' | head -n 1 + find "$search_dir" -type f -name 'dist.zip' ! -path '*/__MACOSX/*' ! -name '._*' | head -n 1 } backup_backend_jar() { diff --git a/bin/prod/deploy_from_package_test.sh b/bin/prod/deploy_from_package_test.sh index fc6454f..89bd8c5 100755 --- a/bin/prod/deploy_from_package_test.sh +++ b/bin/prod/deploy_from_package_test.sh @@ -55,18 +55,21 @@ EOF create_release_zip() { release_dir="$1" release_zip_name="$2" - jar_name="$3" - mkdir -p "$release_dir/package/frontend_payload/dist" - printf 'new-jar\n' > "$release_dir/package/$jar_name" + mkdir -p "$release_dir/package/deploy" "$release_dir/package/__MACOSX/deploy" + mkdir -p "$release_dir/package/frontend_payload/dist" "$release_dir/package/frontend_payload/__MACOSX/dist" + printf 'new-jar\n' > "$release_dir/package/deploy/ruoyi-admin.jar" + printf 'macos-meta\n' > "$release_dir/package/__MACOSX/deploy/._ruoyi-admin.jar" printf 'new\n' > "$release_dir/package/frontend_payload/dist/index.html" + printf 'macos-meta\n' > "$release_dir/package/frontend_payload/__MACOSX/dist/._index.html" ( cd "$release_dir/package/frontend_payload" - zip -qr "$release_dir/package/dist.zip" dist + zip -qr "$release_dir/package/dist.zip" dist __MACOSX ) + mv "$release_dir/package/dist.zip" "$release_dir/package/deploy/dist.zip" ( cd "$release_dir/package" - zip -qr "$release_dir/$release_zip_name" "$jar_name" dist.zip + zip -qr "$release_dir/$release_zip_name" deploy __MACOSX ) } @@ -91,7 +94,7 @@ prepare_release_dir() { printf 'old\n' > "$release_dir/frontend/dist/index.html" create_fake_java "$release_dir/fake-java-bin/java" - create_release_zip "$release_dir" "loan-pricing-release.zip" "app.jar" + create_release_zip "$release_dir" "deploy.zip" cp "$SCRIPT_UNDER_TEST" "$release_dir/deploy_from_package.sh" perl -0pi -e "s#JAVA_BIN=\"/home/webapp/env/java/bin/java\"#JAVA_BIN=\"$release_dir/fake-java-bin/java\"#" \ "$release_dir/deploy_from_package.sh" @@ -151,7 +154,7 @@ test_multiple_release_zip_should_fail() { trap 'cleanup_release_dir "$release_dir"' EXIT INT TERM prepare_release_dir "$release_dir" "$backend_port" - cp "$release_dir/loan-pricing-release.zip" "$release_dir/loan-pricing-release-copy.zip" + cp "$release_dir/deploy.zip" "$release_dir/deploy-copy.zip" if ( cd "$release_dir" diff --git a/doc/implementation-report-2026-04-01-production-one-click-deploy-reference-zip.md b/doc/implementation-report-2026-04-01-production-one-click-deploy-reference-zip.md new file mode 100644 index 0000000..22bd5b0 --- /dev/null +++ b/doc/implementation-report-2026-04-01-production-one-click-deploy-reference-zip.md @@ -0,0 +1,33 @@ +# 生产一键部署脚本参考 deploy.zip 调整实施记录 + +## 参考压缩包 +- 参考文件:`deploy/deploy.zip` +- 已核对压缩包结构: + - `deploy/ruoyi-admin.jar` + - `deploy/dist.zip` + - `__MACOSX/deploy/._ruoyi-admin.jar` + +## 问题原因 +- 原脚本按 `find ... -name '*.jar'` 统计后端产物 +- 参考压缩包中包含 `__MACOSX/deploy/._ruoyi-admin.jar` +- 该文件会被误算成第二个 `jar`,导致脚本报错“后端 jar 数量不正确,期望 1 个,实际 2 个” + +## 修改内容 +- 更新 `bin/prod/deploy_from_package.sh` +- 在后端 `jar` 和前端 `dist.zip` 搜索时忽略: + - `__MACOSX` 目录下文件 + - `._*` 资源分叉文件 +- 更新 `bin/prod/deploy_from_package_test.sh` +- 自测发布包结构改为贴近真实 `deploy/deploy.zip`: + - 外层为 `deploy/ruoyi-admin.jar` + - 外层为 `deploy/dist.zip` + - 带 `__MACOSX` 资源文件 + - 内层 `dist.zip` 也带 `dist/` 和 `__MACOSX/` + +## 验证结果 +- 已执行 `sh -n bin/prod/deploy_from_package.sh` +- 已执行 `sh bin/prod/deploy_from_package_test.sh` +- 自测结果确认: + - 脚本可正确识别参考压缩包结构 + - `__MACOSX` 和 `._*` 不会再被误判为有效发布产物 + - 正常部署链路仍然通过