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)
|
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 并行线程。
|
# Java 默认走增量 package,并允许通过 .env 配 Maven 并行线程。
|
||||||
command = ["mvn"]
|
command = ["mvn"]
|
||||||
maven_threads = str(JAVA_MAVEN_THREADS or "").strip()
|
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),
|
maven_module_list(service_names),
|
||||||
"-am",
|
"-am",
|
||||||
"-Dmaven.test.skip=true",
|
"-Dmaven.test.skip=true",
|
||||||
"package",
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
if clean:
|
||||||
|
command.append("clean")
|
||||||
|
command.append("package")
|
||||||
return command
|
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(
|
def build_single_java_image(
|
||||||
service_name: str,
|
service_name: str,
|
||||||
*,
|
*,
|
||||||
@ -673,14 +689,32 @@ def build_java_images(
|
|||||||
progress=progress,
|
progress=progress,
|
||||||
)
|
)
|
||||||
emit_progress(progress, "build.java.maven", f"开始 Maven 打包:{maven_module_list(service_names)}")
|
emit_progress(progress, "build.java.maven", f"开始 Maven 打包:{maven_module_list(service_names)}")
|
||||||
run_logged_command(
|
try:
|
||||||
java_maven_package_command(service_names),
|
run_logged_command(
|
||||||
cwd=worktree_root,
|
java_maven_package_command(service_names),
|
||||||
label="java maven package",
|
cwd=worktree_root,
|
||||||
timeout_seconds=SERVICE_BUILD_TIMEOUT_SECONDS,
|
label="java maven package",
|
||||||
progress_stage="build.java.maven.package",
|
timeout_seconds=SERVICE_BUILD_TIMEOUT_SECONDS,
|
||||||
progress=progress,
|
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:
|
else:
|
||||||
emit_progress(progress, "build.java.maven", "跳过 Maven,直接复用已有 Jar")
|
emit_progress(progress, "build.java.maven", "跳过 Maven,直接复用已有 Jar")
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user