如何设置带有标签的作业工件永不过期 Gitlab CI

dea*_*ger 7 artifacts gitlab gitlab-ci gitlab-ci-runner

我想知道如果提交带有标签,是否有可能将生成工件的作业设置为永不过期,否则它应该过期。目前,它在全球范围内设置为 3 天后到期。但我想要的东西是,如果提交是通过特定的操作完成的tag,并且它运行Job A生成工件,那么它永远不会过期。但对于没有标签的其他提交也应运行相同的Job A操作,并且为此生成的工件应在全局设置的时间内过期。

Von*_*onC 7

请参阅GitLab 13.3(2020 年 8 月),这是官方支持的
\n(与“解决方法”相反,expire_in 5 years!)

\n
\n

将作业工件配置为永不过期

\n

作为开发人员,您可以指定作业工件\xe2\x80\x99 的确切到期日期,但在某些情况下您可能需要永久保留工件。

\n

expire_in现在,您可以通过将的值设置为将工件设置为永不过期never现在,您可以通过在 CI 配置中

\n

请参阅文档问题

\n
\n
\n

OP 澄清:

\n
\n

我有一项针对每次提交运行的作业,并且该作业的工件将在三天内过期,但对于同一个作业,如果有带有标签的提交,我希望工件永远保留。

\n
\n
\n

注意:GitLab 13.4(2020 年 9 月)添加了一个有趣的功能:

\n
\n

锁定最新的作业工件以防止删除

\n

GitLab 现在将自动锁定任何活动分支、MR 或标签上成功作业和管道的最新工件,以防止其因过期而被删除。这使得您可以更轻松地设置更积极的过期策略来清理较旧的工件,有助于减少磁盘空间消耗,并确保您\xe2\x80\x99始终从管道中获得最新工件的副本。

\n

请参阅文档问题

\n
\n


小智 7

您可以有一个专门的工作来处理仅在标签上运行的工件持久性。就像是:

persist-tag-artifacts:
  # Use this job to specify artifacts that should never expire for tag pipelines.
  stage: post-deploy
  rules:
    - if: '$CI_COMMIT_TAG != null'
  script:
    - echo "Persisting artifacts for tag pipelines"
  artifacts:
    # Specify artifacts from previous jobs to be persisted indefinitely
    paths:
      - myArtifactsPathFromJob1
      - myArtifactsPathFromJob2
      - ...
    expire_in: never
Run Code Online (Sandbox Code Playgroud)

在管道的最后一个“工件创建”阶段之后运行此作业。前一阶段作业中的所有工件都会自动复制到此作业中。如果您不想复制所有工件,而只复制您想要保留的工件,则可以使用关键字dependencies

如果 Gitlab 能够有条件地设置全局“expire_in: never”,那就更好了


Art*_*han 0

您可以设置每个作业的工件到期时间

因此,对于使用特定标签的作业,您可以将工件设置为在很长一段时间内过期

job:
  tags:
    - your_tag
  artifacts:
    expire_in: 5 yr
Run Code Online (Sandbox Code Playgroud)