如何在gitlab-ci中使用maven分离测试和构建阶段?

mem*_*und 7 continuous-integration maven gitlab

我想将maven阶段分开为buildtestdeploy

问题:我在这里把事情复杂化了吗?我是否应该只使用一个mvn clean package阶段,因为compiletest是在阶段期间由 Maven 隐式执行的package

.gitlab-ci.yml:

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script: mvn clean compile

test:
  stage: test
  script: mvn clean test

deploy:
  stage: deploy
  script: mvn clean package -Dmaven.test.skip=true
  #...continue with docker deployment...
Run Code Online (Sandbox Code Playgroud)

小智 1

帖子里有两个问题。

如何在gitlab-ci中使用maven分离测试和构建阶段?

这是可能的,可以像这样完成,如GitLab maven 示例中所述:

image: maven:latest

variables:
  MAVEN_OPTS: >-
    -Dhttps.protocols=TLSv1.2
    -Dmaven.repo.local=.m2/repository
    -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN
    -Dorg.slf4j.simpleLogger.showDateTime=true
    -Djava.awt.headless=true

  MAVEN_CLI_OPTS: >-
    -s .gitlab-ci_settings.xml
    --batch-mode
    --errors
    --fail-at-end
    --show-version
    -DinstallAtEnd=true
    -DdeployAtEnd=true
    -Dstyle.color=always

cache:
  paths:
    - .m2/repository/
    - target/

mvn-compile-job:
  stage: mvn-compile
  script:
    - mvn $MAVEN_CLI_OPTS compile

mvn-test-job:
  stage: mvn-test
  script:
    - mvn $MAVEN_CLI_OPTS test

mvn-deploy-job:
  stage: mvn-deploy
  script:
    - mvn $MAVEN_CLI_OPTS deploy
  only:
    - master
Run Code Online (Sandbox Code Playgroud)

问题:我在这里把事情复杂化了吗?

这实际上取决于必须做什么以及您想要实现什么。例如,如果您想在不同的分支上运行不同的阶段(在上面的示例中,我们mvn deploy仅在主分支上运行),这是一个很好的解决方案。

mvn deploy然而,与从一开始就在单个分支上运行单独的阶段相比,在 docker 运行器上需要更多时间,因为每个 GitLab 作业运行都需要图像拉取。这只是为 Maven 存储库配置 CI/CD 时需要考虑的事情。