首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无需在每个阶段重新编译即可运行GitlabCI goals

无需在每个阶段重新编译即可运行GitlabCI goals
EN

Stack Overflow用户
提问于 2021-02-03 02:28:13
回答 2查看 265关注 0票数 2

我有一个托管在Gitlab上的模块化Java项目,带有一些Gitlab CI,每次我们推动一些更改时都会检查代码。问题是这个项目最近增长了很多,现在每个CI管道大约需要15分钟才能完成。

我注意到的是,代码基本上被编译了三次:在“构建”作业(运行mvn compile)期间,在“测试”作业(运行mvn test)期间,在“部署”作业(运行mvn install)期间。此外,测试运行了两次,一次是在"test“中,一次是在"deploy”中。

我试图通过将mvn test转换为mvn resources:testResources compiler:testCompile surefire:test并将mvn install转换为mvn jar:jar install来更改此行为,但现在测试因未知的类和包而失败(即使当我尝试逐个手动运行所有命令时也能正常工作),比如package my.project.package does not exist

也许我正在尝试做一些Gitlab CI做不到的事情?也许还有更好的方法呢?

这是我的YAML文件:

代码语言:javascript
复制
image: myproject:latest

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.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: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true -U"

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

build:
  stage: build
  tags:
    - shell
  script:
    - mvn $MAVEN_CLI_OPTS clean compile

test:
  stage: test
  tags:
    - shell
  script:
    - mvn $MAVEN_CLI_OPTS resources:testResources compiler:testCompile surefire:test


install:
  stage: deploy
  tags:
    - shell
  script:
    - mvn $MAVEN_CLI_OPTS jar:jar install:install
  only:
    - master
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-03 23:33:29

显然,Gitlab CI的默认行为是在作业完成后删除它的结果,但有两个称为artifactsdependencies的功能,允许用户保存一些数据并将其传输到其他作业。现在,该文件如下所示:

代码语言:javascript
复制
image: myproject:latest

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.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: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true -U"

cache:
  key: new_cache
  paths:
    - .m2/repository/
    - frontend/node_modules/

build:
  stage: build
  tags:
    - shell
  script:
    - mvn $MAVEN_CLI_OPTS clean compile
  artifacts:
    paths: 
      - backend/target/

test:
  stage: test
  tags:
    - shell
  script:
    - mvn $MAVEN_CLI_OPTS resources:testResources compiler:testCompile surefire:test
  dependencies:
    - build

install:
  stage: deploy
  tags:
    - shell
  script:
    - mvn $MAVEN_CLI_OPTS jar:jar install:install
  dependencies: 
    - build
  only:
    - master

现在,testdeploy作业可以访问target目录,并且无需重新编译所有内容即可运行。结合node_modules的缓存,它将执行时间减少到只有5分钟。

票数 1
EN

Stack Overflow用户

发布于 2021-02-03 02:41:27

最好的方法不是将Maven构建拆分为几个部分,而是直接运行

mvn clean install

mvn clean deploy

而不需要之前分别运行编译和测试阶段。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66015539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档