gitlab-ci 运行器中具有不同到期时间的多条路径

Posted

技术标签:

【中文标题】gitlab-ci 运行器中具有不同到期时间的多条路径【英文标题】:Multiple paths with different expiry time in gitlab-ci runners 【发布时间】:2018-02-24 18:55:42 【问题描述】:

我在使用 Gitlab-CI 解析阶段之间的 build 目录时遇到问题。

Gitlab-CI 在各个阶段之间擦除创建的构建工件,这看起来很奇怪。我正在尝试在构建和测试阶段之间存储构建工件,但是构建阶段也有我想要保留的构建工件以及运行下一阶段所需的构建工件。

是否可以使用artifacts 选项在不同的路径中设置多个到期时间?

我尝试了以下方法,它只保留了 paths 的第二个定义(构建/测试* 路径),而不是声明的第一个 paths (.dmg)。

  artifacts:
    paths:
    - build/*.dmg
    expire_in: 1 week
    paths:
    - build/test1
    - build/test2
    - build/test3
    expire_in: 15 mins

我已尝试使用caches,但似乎无法正常工作...任何建议将不胜感激!

【问题讨论】:

【参考方案1】:

根据文档,这似乎不可能,但我需要做类似的事情,因此我做了以下解决方法。

在生成所有工件的构建阶段,我为所有工件设置了 15 分钟的过期时间,包括应该具有不同过期时间的工件。在你的情况下build/*.dmg。所以我对构建部分的工件定义是这样的:

 artifacts:
    paths:
    - build/*.dmg
    - build/test1
    - build/test2
    - build/test3
    expire_in: 15 mins

之后,我在管道的下一阶段定义了两个作业。如果您这样做,这两个作业将同时运行。其中一项工作完成了您最初打算用于文件的操作:build/test1build/test2build/test3。流水线这个阶段的另一项工作在脚本部分应该几乎没有任何内容,可能类似于echo "dummy job"。但是因为虚拟作业从前一个作业接收构建工件,我们可以使用它来将过期时间从 15 分钟“更改”为一周,只需使用相同的文件创建第二个工件,如下所示:

artifacts:
    paths:
    - build/*.dmg
    expire_in: 1 week

这是一个糟糕的解决方法,因为它复制了目标工件,因为我们将有一个有效期为 15 分钟,另一个有效期为 1 周。

【讨论】:

感谢您的回答!您是否有机会提供更多信息来封装它?所以第一个作业创建了一个虚拟阶段,然后构建的作业只有工件? 我试图更好地解释自己我希望我现在更加连贯,英语对我来说是第二语言

以上是关于gitlab-ci 运行器中具有不同到期时间的多条路径的主要内容,如果未能解决你的问题,请参考以下文章

来自共享 Gitlab 运行器的 SSH 停止工作

Gitlab CI/CD 运行器:找不到 mvn 命令

如何设置GitLab +运行器来缓存Docker层

具有私有 IP 的 AWS Gitlab Autoscale 运行器,不想启用公共 IP

如何使用彼此独立的不同运行器运行 Gitlab CI 作业?

使用 gitlab-ci.yml 的 Docker 内部的 Docker