【问题标题】:Avoid maven phase repeatly running in GitLab CI避免在 GitLab CI 中重复运行 maven 阶段
【发布时间】:2019-11-15 20:32:10
【问题描述】:

如果我们在.gitlab-ci.yml中定义这样的阶段:

stages:
  - build
  - test
  - deploy
build:
  stage: build
  script: mvn -B compile

test:
  stage: test
  script: mvn -B test

deploy:
  stage: deploy
  script: mvn -B deploy

这很好用,但有一个问题是,在我们针对阶段运行的每个作业中,都会运行前面的 pahse。在上面的示例中,测试阶段将在“测试”和“部署”阶段运行。我认为它没用,并且会增加额外的管道运行时间。我知道我可以直接调用插件目标,但这很难维护 pom.有什么好主意吗?

【问题讨论】:

    标签: maven gitlab-ci


    【解决方案1】:

    理论上,如果您将 maven 项目拆分为执行不同操作的多个模块,您可以做到这一点。然后,您可以使用高级反应器选项来恢复构建并使用以下方法处理下一个模块:

    maven -rf <module name> <command>
    

    请注意,我是在理论上说的。在实践中,拆分构建和测试阶段在很大程度上是没有意义的,而且很难做到(除非测试阶段实际上是一个集成测试阶段)。这也是付出了很多努力却收获甚微。

    有关高级反应器选项的更多信息,请参见此处:

    https://blog.sonatype.com/2009/10/maven-tips-and-tricks-advanced-reactor-options/

    【讨论】:

    • 清除混乱的-rf--resume-from的缩写;-)
    • 这里的问题与每个 GitLab 作业是完全独立的事实有关,因此 test 作业将无法访问在运行 build 作业时创建的 target Maven 文件夹。
    • 这实际上与独立运行阶段不同。您可以通过将目标目录存储为工件来解决此问题:artifacts: paths: - target/
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2021-11-30
    • 2021-05-31
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多