如何在 Maven 构建中禁用 Spring Cloud Kubernetes

问题描述 投票:0回答:4

运行 Spring Boot 2.6.6 和 Spring Cloud 2021.0.1

我正在尝试将现有服务迁移到 Kubernetes,因此我添加了对

spring-cloud-starter-kubernetes-client-all
的依赖。默认情况下,我有
spring.cloud.kubernetes.enable=false
并使用
kubernetes
配置文件来启用它。这样做的目的是让该服务能够在 Kubernetes 和遗留环境中运行。

我的单元测试在本地构建时成功完成,但在 Bitbucket 管道中失败,并出现以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.cloud.kubernetes.commons.config.NamespaceResolutionFailedException: unresolved namespace

我怀疑发生这种情况是因为 Bitbucket Pipelines 部署在 Kubernetes 中,而 Spring 以某种方式检测到了这一点。我已经尝试了以下方法,但没有效果

  • 在命令行上将
    --define SPRING_CLOUD_KUBERNETES_ENABLED=false
    传递给 Maven
  • 将其设置为环境变量,例如,
    export SPRING_CLOUD_KUBERNETES_ENABLED=false
  • 在命令行上将
    --define spring.cloud.kubernetes.enabled=false
    传递给 Maven

我还检查了 StackOverflow 是否有类似问题并调查了代码也无济于事。实际提出问题的类是

KubernetesClientConfigUtils
,应该禁用它。

我将不胜感激您能提供的任何指导。

spring spring-boot maven kubernetes spring-cloud
4个回答
6
投票

Spring Cloud 在加载活动的 spring 配置文件配置之前检查应用程序是否在 K8s 环境中运行,并将

kubernetes
添加到活动的配置文件中。此前,在 Hoxton SR10 中,在检查 Kubernetes 之前会识别并加载配置文件。如果在配置文件配置或 Maven pom 属性中设置,则从那里获取
bootstrap-<profile>.yml
由于 maven 允许在命令行上设置系统属性,因此可以通过在那里设置来禁用 kubernetes 检测:

spring.cloud.kubernetes.enabled

surefire maven 插件允许为所有测试设置系统属性,因此可以在 Surefire 插件配置中将 
mvn test -Dspring.cloud.kubernetes.enabled=false

设置为

spring.cloud.kubernetes.enabled
false

还可以使用 @Faron 的方法在单个测试类上设置配置,以在任何 
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <systemPropertyVariables> <spring.cloud.kubernetes.enabled>false</spring.cloud.kubernetes.enabled> </systemPropertyVariables> </configuration> </plugin>

带注释的单元测试中显式设置属性,例如:

WebMvcTest

它还应该适用于加载 Spring 应用程序上下文的其他单元测试注释,例如 
@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })

    


1
投票
将该属性添加到单元测试上下文中

WebFluxTest

这也适用于加载 Spring 应用程序上下文的任何单元测试注释,例如 
@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })

    


1
投票

@WebFluxTest

我的解决方案是在 test 
NamespaceResolutionFailedException: unresolved namespace

文件夹中添加一个

bootstrap.yml
文件,其中包含以下内容:
resources

(如果有的话,将其从 
spring: cloud: compatibility-verifier.enabled: false kubernetes: enabled: false reload.enabled: false discovery.enabled: false

中删除)

来自文档:

https://www.baeldung.com/spring-cloud-bootstrap-properties

https://github.com/spring-cloud/spring-cloud-kubernetes/issues?q=unresolved+namespace


0
投票

application.yml

如果你有

spring: cloud: kubernetes: enabled: false

从配置级别删除

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.