如何在 Maven 构建中禁用 Spring Cloud Kubernetes
How to disable Spring Cloud Kubernetes in a Maven build
运行Spring 引导 2.6.6 和 Spring 云 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
我也检查了 Whosebug 是否存在类似问题,并调查了代码也无济于事。实际提出问题的 class 是 KubernetesClientConfigUtils
,应将其禁用。
如果您能提供任何指导,我将不胜感激。
在尝试了其他几种方法后,我终于偶然发现了一种可行的方法。我使用
将 属性 添加到 unit-test 上下文
@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })
这也适用于加载 Spring 应用程序上下文的任何 unit-test 注释,例如 @WebFluxTest
Spring Cloud 在加载活动 spring 配置文件配置之前检查应用程序是否 运行 在 K8s 环境中,并将 kubernetes
添加到活动配置文件。以前,在 Hoxton SR10 中,在检查 Kubernetes 之前识别并加载配置文件 bootstrap-<profile>.yml
。 spring.cloud.kubernetes.enabled
如果在配置文件配置或 Maven pom 属性中设置,则从那里获取。
由于 maven 允许在命令行上设置系统属性,因此可以通过在此处设置来禁用 kubernetes 检测:
mvn test -Dspring.cloud.kubernetes.enabled=false
surefire maven 插件允许为所有测试设置系统属性,因此可以在 surefire 插件配置中将 spring.cloud.kubernetes.enabled
设置为 false
。
<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>
也可以在单个测试 类 上设置配置,使用@Faron 的方法在任何 WebMvcTest
注释单元测试中显式设置 属性,例如:
@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })
它还应该适用于加载 Spring 应用程序上下文的其他单元测试注释,例如 WebFluxTest
.
运行Spring 引导 2.6.6 和 Spring 云 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
我也检查了 Whosebug 是否存在类似问题,并调查了代码也无济于事。实际提出问题的 class 是 KubernetesClientConfigUtils
,应将其禁用。
如果您能提供任何指导,我将不胜感激。
在尝试了其他几种方法后,我终于偶然发现了一种可行的方法。我使用
将 属性 添加到 unit-test 上下文@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })
这也适用于加载 Spring 应用程序上下文的任何 unit-test 注释,例如 @WebFluxTest
Spring Cloud 在加载活动 spring 配置文件配置之前检查应用程序是否 运行 在 K8s 环境中,并将 kubernetes
添加到活动配置文件。以前,在 Hoxton SR10 中,在检查 Kubernetes 之前识别并加载配置文件 bootstrap-<profile>.yml
。 spring.cloud.kubernetes.enabled
如果在配置文件配置或 Maven pom 属性中设置,则从那里获取。
由于 maven 允许在命令行上设置系统属性,因此可以通过在此处设置来禁用 kubernetes 检测:
mvn test -Dspring.cloud.kubernetes.enabled=false
surefire maven 插件允许为所有测试设置系统属性,因此可以在 surefire 插件配置中将 spring.cloud.kubernetes.enabled
设置为 false
。
<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>
也可以在单个测试 类 上设置配置,使用@Faron 的方法在任何 WebMvcTest
注释单元测试中显式设置 属性,例如:
@WebMvcTest(properties = { "spring.cloud.kubernetes.enabled=false" })
它还应该适用于加载 Spring 应用程序上下文的其他单元测试注释,例如 WebFluxTest
.