Quarkus-Helm集成Gradle:如何添加自定义Helm Chart模板?
解决Quarkus Helm插件自定义模板被覆盖的问题
针对你遇到的自定义Helm模板被构建过程覆盖、kubernetes/common.yml不支持Helm变量的问题,提供以下几种可行方案:
方案一:利用Quarkus Helm插件的额外模板目录功能(推荐)
Quarkus Helm插件原生支持指定额外的模板目录,生成Chart时会自动将该目录下的文件合并到最终的templates目录,无需手动写复制任务,也不会被覆盖。
在application.properties中添加配置:
quarkus.helm.extra-templates-dir=src/main/helm/templates
或者在application.yml中配置:
quarkus: helm: extra-templates-dir: src/main/helm/templates
将你的networkpolicy-deny-all.yaml放在src/main/helm/templates目录下,插件构建时会自动将其包含到生成的Helm Chart中,Helm变量(如{{ .Values.namespace }})也能正常解析。
方案二:调整Gradle复制任务的执行时机
如果不想修改Quarkus配置,可以通过调整Gradle任务顺序,确保复制操作在Quarkus生成Helm Chart之后执行,避免文件被覆盖。
修改你的Gradle任务:
// 重命名任务避免与默认copy任务冲突 tasks.register('copyNetworkPolicy', Copy) { from file("src/main/helm/templates/networkpolicy-deny-all.yaml") into layout.buildDirectory.dir("helm/kubernetes/my-app/templates") } // 让Quarkus生成Helm Chart的任务执行完成后自动运行复制任务 tasks.named('quarkusHelmBuild').configure { finalizedBy('copyNetworkPolicy') } // 确保build任务依赖复制任务,保证构建流程中执行 tasks.named('build').configure { dependsOn('copyNetworkPolicy') }
注:Quarkus Helm插件的生成任务名称可能为quarkusHelm或quarkusHelmBuild,可通过./gradlew tasks命令查看具体名称。
关于kubernetes/common.yml的说明
kubernetes/common.yml用于定义静态Kubernetes资源,不支持Helm模板语法(如{{ .Values.* }}),因此不适合存放需要动态渲染的网络策略模板,必须使用Helm模板文件放在templates目录下。
内容的提问来源于stack exchange,提问作者javanoob
相关产品推荐
相关产品推荐

