У меня есть проект, который должен запускать интеграционные тесты в разных средах (Postgres, Oracle и т. Д.)
Для этого я создал разные задачи, в которых я устанавливаю переменные среды по-разному в зависимости от БД, например:
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
или мои задачи равны, когда я запускаю всетестовое задание?
Как правильно выполнять интеграционные тесты параллельно?