我有一个项目,需要在不同的环境(Postgres,Oracle等)中运行集成测试
为此,我创建了不同的任务,其中我根据db设置了不同的环境变量,例如:
task postgresqlIntegrationTest(type: Test, group: "Verification", description: "Runs integration tests on postgresql.") {
dependsOn compileTestJava
mustRunAfter test
environment "env", "postgresql"
useJUnitPlatform {
filter {
includeTestsMatching "*IT"
}
}
}
哪个工作没问题。
现在,我想并行运行当前在.gitlab-ci.yml文件中配置的那些任务,如下所示:
image: docker
variables:
BUILD_ID: "job# $CI_JOB_ID"
GIT_COMMIT: $CI_COMMIT_SHA
GIT_BRANCH: $CI_COMMIT_REF_NAME
stages:
- test
test:unit:
stage: test
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- ls -la
- git status
- git config --global user.name "Git Lab"
- ./gradlew test --stacktrace --info
test:h2:
stage: test
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- ls -la
- git status
- git config --global user.name "Git Lab"
- ./gradlew h2IntegrationTest--stacktrace --info
test:postgres:
stage: test
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- ls -la
- git status
- git config --global user.name "Git Lab"
- ./gradlew postgresqlIntegrationTest --stacktrace --info
test:oracle:
stage: test
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- ls -la
- git status
- git config --global user.name "Git Lab"
- ./gradlew oracleIntegrationTest --stacktrace --info
但是,这导致步骤“ testClasses”,“ compileTestJava”,“ classes”等对于每个并行任务都运行,这似乎很浪费。有什么办法可以执行之前的那些基础任务,然后在“测试”阶段使用它们?
我仍然需要运行gradlew build
还是运行所有测试时任务相等?
使集成测试并行的正确方法是什么?