基于Quarkus+Camel的项目在Kubernetes环境构建失败问题求助
最近碰到个头疼的问题:我有个基于Quarkus和Camel的项目,本地构建完全正常,但在Kubernetes集群上的CI环境(Jenkins或Bitbucket)里执行构建时就会异常失败。Kubernetes存储没启用任何只读标记,而且本地启动Docker容器构建也不会出问题,实在搞不懂根源在哪。
以下是构建时的关键日志:
[INFO] Building jar: /home/jenkins/agent/workspace/Build Jobs/Build Gateway Service Starter/target/gateway-service-starter-1.5.1.jar [INFO] [INFO] --- quarkus-maven-plugin:2.9.0.CR1:build (default) @ gateway-service-starter --- [INFO] No Git Properties File Url Defined. Attempting with default: git.properties [ERROR] 无法加载默认的git属性文件git.properties [INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus增强处理已完成,耗时10087ms [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ gateway-service-starter --- [INFO] 使用'UTF-8'编码复制已过滤的资源 [INFO] 正在复制2个资源 [INFO] [INFO] --- quarkus-maven-plugin:2.9.0.CR1:generate-code (default) @ gateway-service-starter --- [INFO] [INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ gateway-service-starter --- [INFO] 检测到变更 - 正在重新编译模块! [INFO] 正在编译54个源文件至/home/jenkins/agent/workspace/Build Jobs/Build Gateway Service Starter/target/classes [INFO] [INFO] --- quarkus-maven-plugin:2.9.0.CR1:generate-code-tests (default) @ gateway-service-starter --- [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ gateway-service-starter --- [INFO] 使用'UTF-8'编码复制已过滤的资源 [INFO] 正在复制2个资源 [INFO] [INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ gateway-service-starter --- [INFO] 检测到变更 - 正在重新编译模块! [INFO] 正在编译22个源文件至/home/jenkins/agent/workspace/Build Jobs/Build Gateway Service Starter/target/test-classes [INFO] [INFO] --- maven-surefire-plugin:3.0.0-M6:test (default-test) @ gateway-service-starter --- [INFO] 跳过surefire执行,因为该配置已运行过 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ gateway-service-starter --- [INFO] Building jar: /home/jenkins/agent/workspace/Build Jobs/Build Gateway Service Starter/target/gateway-service-starter-1.5.1.jar [INFO] [INFO] --- quarkus-maven-plugin:2.9.0.CR1:build (default) @ gateway-service-starter --- [INFO] No Git Properties File Url Defined. Attempting with default: git.properties [ERROR] 无法加载默认的git属性文件git.properties [INFO] ------------------------------------------------------------------------ [INFO] 构建失败 [INFO] ------------------------------------------------------------------------ [INFO] 总耗时: 02:14 min [INFO] 完成时间: 2022-05-30T13:34:00Z [INFO] ------------------------------------------------------------------------ [ERROR] 无法在项目gateway-service-starter上执行目标io.quarkus.platform:quarkus-maven-plugin:2.9.0.CR1:build (default):构建Quarkus应用失败: io.quarkus.builder.BuildException: 构建失败: 因错误导致构建失败 [ERROR] [error]: 构建步骤org.apache.camel.quarkus.core.deployment.CamelNativeImageProcessor#camelRuntimeCatalog抛出异常: java.nio.file.ClosedFileSystemException [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.ensureOpen(ZipFileSystem.java:1619) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.getFileAttributes(ZipFileSystem.java:531) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipPath.readAttributes(ZipPath.java:767) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipPath.readAttributes(ZipPath.java:777) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.readAttributes(ZipFileSystemProvider.java:276) [ERROR] at java.base/java.nio.file.Files.readAttributes(Files.java:1851) [ERROR] at java.base/java.nio.file.Files.isDirectory(Files.java:2322) [ERROR] at org.apache.camel.quarkus.core.deployment.util.CamelSupport.services(CamelSupport.java:71) [ERROR] at org.apache.camel.quarkus.core.deployment.CamelNativeImageProcessor.camelRuntimeCatalog(CamelNativeImageProcessor.java:170) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:568) [ERROR] at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:925) [ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:277) [ERROR] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) [ERROR] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449) [ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478) [ERROR] at java.base/java.lang.Thread.run(Thread.java:833) [ERROR] at org.jboss.threads.JBossThread.run(JBossThread.java:501) [ERROR] [ERROR] [error]: 构建步骤org.apache.camel.quarkus.core.deployment.CamelProcessor#camelServices抛出异常: java.nio.file.ClosedFileSystemException [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.ensureOpen(ZipFileSystem.java:1619) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.getFileAttributes(ZipFileSystem.java:531) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipPath.readAttributes(ZipPath.java:767) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipPath.readAttributes(ZipPath.java:777) [ERROR] at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.readAttributes(ZipFileSystemProvider.java:276) [ERROR] at java.base/java.nio.file.Files.readAttributes(Files.java:1851) [ERROR] at java.base/java.nio.file.Files.isDirectory(Files.java:2322) [ERROR] at org.apache.camel.quarkus.core.deployment.util.CamelSupport.services(CamelSupport.java:71) [ERROR] at org.apache.camel.quarkus.core.deployment.CamelProcessor.camelServices(CamelProcessor.java:213) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:568) [ERROR] at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:925) [ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:277) [ERROR] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) [ERROR] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449) [ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478) [ERROR] at java.base/java.lang.Thread.run(Thread.java:833) [ERROR] at org.jboss.threads.JBossThread.run(JBossThread.java:501) [ERROR] -> [Help 1] [ERROR] [ERROR] 要查看完整的错误堆栈跟踪,请使用-e参数重新运行Maven [ERROR] 使用-X参数重新运行Maven以启用完整的调试日志 [ERROR] [ERROR] 有关错误和可能解决方案的更多信息,请阅读以下文章: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
问题分析
从日志里能揪出两个关键线索:
- 反复出现的
无法加载默认的git属性文件git.properties提示,虽然看起来像警告,但可能触发后续资源加载的连锁问题; - 核心异常是
java.nio.file.ClosedFileSystemException,发生在Camel的部署处理器访问Zip文件系统时,说明在K8s CI环境中,某个Zip文件系统被提前关闭了。
可行的解决方案
处理Git属性文件问题
要么确保CI构建时能生成git.properties文件(比如配置git-commit-id-plugin插件),要么直接在Quarkus配置里关闭对该文件的检查:在application.properties中添加quarkus.git.properties.enabled=false。排查K8s CI环境的文件系统
虽然你说存储没开只读,但K8s的CI agent可能用了临时存储或者特殊挂载方式,导致Zip文件系统提前关闭。可以试试:- 调整CI构建的工作目录,使用更稳定的持久化存储卷;
- 如果是构建原生镜像,在Maven命令中添加
-Dquarkus.native.container-build=false,避免容器内文件系统的兼容性问题。
升级Quarkus和Camel版本
你用的Quarkus 2.9.0.CR1是候选版本,本身可能存在文件系统相关的bug。建议升级到稳定的LTS版本(比如2.13.x系列),同时同步升级对应的Camel Quarkus扩展版本,这类问题在后续版本中基本都被修复了。避免Maven构建目标重复执行
从日志里看到quarkus-maven-plugin:build被执行了两次,这可能导致资源被重复处理,进而触发Zip文件系统异常。检查CI的Maven命令,确保只执行一次完整的构建生命周期,比如用mvn clean package代替重复调用build目标。
内容的提问来源于stack exchange,提问作者mangusbrother

