我正在尝试运行一个作业来执行我们的 ci 管道中的 spring boot 应用程序的测试,我是使用 gitlab ci 管道的新手,但我找到了一个 作业配置 来做到这一点。该项目包含单元测试和集成测试。就我而言,我将 mvn 命令更改为 ./mvnw 以便能够执行 verify 命令。我的工作是这样的:
verification:
stage: verify
allow_failure: true
script:
- chmod +x mvnw
- ./mvnw verify
artifacts:
when: always
reports:
junit:
- target/surefire-reports/TEST-*.xml
执行单元测试没有任何问题,但是尝试加载应用程序上下文的集成测试由于抛出错误而失败,因为某些属性的 application.properties 值被设置为使用环境变量,错误就像下面这样:
> SampleServiceTest.givenIdDeleteObject » IllegalState Failed to load
> ApplicationContext.......
> Caused by: java.lang.IllegalArgumentException: Could not resolve
> placeholder 'SHOW_SQL' in value "${SHOW_SQL}"
在项目的application.properties中,有一个属性集:
spring.jpa.show-sql=${SHOW_SQL}
已经存在的作业编译和部署应用程序没有任何错误,并且每次管道运行时它们都会通过。
关于在这项新工作中执行集成测试,我有什么遗漏的吗?
问题似乎与未为 CI 管道中的集成测试设置
SHOW_SQL
环境变量有关。当运行加载应用程序上下文的测试时,您的应用程序尝试使用环境中的值解析 application.properties
中的占位符。
您可以通过在作业定义中添加
SHOW_SQL
或 environment
部分来定义 GitLab CI 作业中的 variables
环境变量吗,如下所示:
verification:
stage: verify
allow_failure: true
script:
- chmod +x mvnw
- ./mvnw verify
variables:
SHOW_SQL: "true" # Or "false", depending on your desired configuration
artifacts:
when: always
reports:
junit:
- target/surefire-reports/TEST-*.xml
通过在作业的
SHOW_SQL
部分中设置 variables
,它应该在执行集成测试期间可用作环境变量,从而允许 Spring Boot 正确解析 application.properties
中的占位符。