[英]How to skip preceding maven goals in gitlab-ci build?
我有一個 java webservice,想在gitlab-ci
設置單獨的測試/構建/部署階段。 流程可能很簡單,如下所示:
stages:
- test
- build
- deploy
test:
stage: clean test
script:
- mvn $MAVEN_CLI_OPTS test
build:
stage: build
script:
- mvn $MAVEN_CLI_OPTS package -DskipTests=true
deploy:
stage: deploy
script:
- mvn $MAVEN_CLI_OPTS package -DskipTests=true
問題:每個 Maven 目標都會執行前面的生命周期目標。 例如, package
或deploy
目標默認也會執行test
目標。 因此必須使用skipTests=true
明確地排除它。
無論如何,像package
這樣的目標仍然會在測試 + 部署時重新執行。
問題:這可以進一步優化嗎? 我的意思是,我不想在每個階段都重建 jar。 我可以告訴 Maven 重用 jar,並跳過任何前面的目標嗎?
我知道單個deploy
階段足以讓 maven 在后台執行包和測試目標。 但是在我的 gitlab 中,我總是在deploy
階段失敗,而例如, test
目標中的 junit 測試在下面失敗了。
不,不是真的。 Maven 不是為支持這一點而構建的。
您可以使用具有它們的插件的skip
參數。
或者,只需使用mvn clean test
和mvn deploy -DskipTests=true
兩個步驟,這應該不會比單個mvn clean deploy
花費更長的時間。
您可以使用作業工件來訪問前一階段的結果(在本例中為已編譯的類)。 此外,緩存本地存儲庫以便僅下載一次依賴項也是合理的。 例子:
default:
image: maven:3
variables:
MAVEN_CLI_OPTS: "--batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"
cache:
paths:
- .m2/repository
test-compile:
stage: build
script: mvn $MAVEN_CLI_OPTS test-compile
artifacts:
paths:
- target/
test:
stage: test
script: mvn $MAVEN_CLI_OPTS test
# maven-compiler-plugin outputs "Nothing to compile - all classes are up to date"
artifacts:
when: always
reports:
junit:
- target/surefire-reports/TEST-*.xml
deploy:
stage: deploy
script: mvn $MAVEN_CLI_OPTS package -DskipTests
也可以通過這種方式並行運行單元測試和集成測試:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.