fix: retry java cache corruption with clean build
This commit is contained in:
parent
29b136c734
commit
395f72e8cb
@ -572,7 +572,7 @@ def maven_module_list(service_names: list[str]) -> str:
|
||||
return ",".join(modules)
|
||||
|
||||
|
||||
def java_maven_package_command(service_names: list[str]) -> list[str]:
|
||||
def java_maven_package_command(service_names: list[str], *, clean: bool = False) -> list[str]:
|
||||
# Java 默认走增量 package,并允许通过 .env 配 Maven 并行线程。
|
||||
command = ["mvn"]
|
||||
maven_threads = str(JAVA_MAVEN_THREADS or "").strip()
|
||||
@ -584,12 +584,28 @@ def java_maven_package_command(service_names: list[str]) -> list[str]:
|
||||
maven_module_list(service_names),
|
||||
"-am",
|
||||
"-Dmaven.test.skip=true",
|
||||
"package",
|
||||
]
|
||||
)
|
||||
if clean:
|
||||
command.append("clean")
|
||||
command.append("package")
|
||||
return command
|
||||
|
||||
|
||||
def should_retry_java_maven_with_clean(error_text: str) -> bool:
|
||||
# 固定工作区第一次启用时,历史 target 产物偶尔会有损坏;命中后退回一次 clean package 自愈。
|
||||
normalized = str(error_text or "")
|
||||
markers = (
|
||||
"java.util.zip.ZipException",
|
||||
"java.io.EOFException",
|
||||
"bad class file",
|
||||
"invalid loc",
|
||||
"invalid block type",
|
||||
"Unexpected end of ZLIB input stream",
|
||||
)
|
||||
return any(marker in normalized for marker in markers)
|
||||
|
||||
|
||||
def build_single_java_image(
|
||||
service_name: str,
|
||||
*,
|
||||
@ -673,14 +689,32 @@ def build_java_images(
|
||||
progress=progress,
|
||||
)
|
||||
emit_progress(progress, "build.java.maven", f"开始 Maven 打包:{maven_module_list(service_names)}")
|
||||
run_logged_command(
|
||||
java_maven_package_command(service_names),
|
||||
cwd=worktree_root,
|
||||
label="java maven package",
|
||||
timeout_seconds=SERVICE_BUILD_TIMEOUT_SECONDS,
|
||||
progress_stage="build.java.maven.package",
|
||||
progress=progress,
|
||||
)
|
||||
try:
|
||||
run_logged_command(
|
||||
java_maven_package_command(service_names),
|
||||
cwd=worktree_root,
|
||||
label="java maven package",
|
||||
timeout_seconds=SERVICE_BUILD_TIMEOUT_SECONDS,
|
||||
progress_stage="build.java.maven.package",
|
||||
progress=progress,
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
if not should_retry_java_maven_with_clean(str(exc)):
|
||||
raise
|
||||
emit_progress(
|
||||
progress,
|
||||
"build.java.maven",
|
||||
"检测到缓存产物损坏,退回一次 clean package 自愈",
|
||||
level="warning",
|
||||
)
|
||||
run_logged_command(
|
||||
java_maven_package_command(service_names, clean=True),
|
||||
cwd=worktree_root,
|
||||
label="java maven clean package",
|
||||
timeout_seconds=SERVICE_BUILD_TIMEOUT_SECONDS,
|
||||
progress_stage="build.java.maven.clean-package",
|
||||
progress=progress,
|
||||
)
|
||||
else:
|
||||
emit_progress(progress, "build.java.maven", "跳过 Maven,直接复用已有 Jar")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user