【发布时间】:2019-07-18 23:55:40
【问题描述】:
我正在使用 GitLab CI。
我在构建阶段有 2 个作业,它们以不同的方式构建我的应用程序。 2 个作业为分支上传缓存。我使用编译好的源代码在测试阶段启动了一些测试。
build:
stage: build
script:
- ./gradlew build --build-cache --quiet
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- "*/build"
build_with_different_conf:
stage: build
script:
- ./gradlew buildDiff --build-cache --quiet
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- "*/build"
Test:
stage: test
script:
- ./gradlew test --build-cache
在我的示例中,作业 build_with_different_conf 需要更多时间才能完成。
我的问题是:最后完成的构建作业是从第一个构建作业上传缓存并替换缓存,还是将文件与先前的作业合并?
谢谢。
【问题讨论】:
-
您能否再解释一下,为什么将
cache用于分支,您的意思是什么。给出一些代码 .yml 示例。 -
我编辑添加更多上下文
-
首先我认为你必须使用缓存,在这种情况下你想使用人工制品来传输你的构建结果。缓存主要用于传输一些依赖项或其他不经常移动的东西,例如 npm node_modules
-
我建议花一些时间在
artifact文档上。据我了解,您想在一项工作中使用build,而不是使用构建结果来加速test。Build1和build2只是不同的入口点。那是对的吗 ?或者您更愿意拥有build1而不是使用结果来加速build2和test? -
不过,您的
build工作结果可能是.classes的工件,而此工件的寿命可能只有几分钟/小时。在接下来的工作中使用这个编译的.classes,你可以构建你的war。您的后续工作只需要依赖于先例,这样他们就可以转移工件。我仍然会在我的第一条评论中说明,缓存可能会被误用,但它不是它的主要角色。
标签: caching continuous-integration gitlab gitlab-ci