dea*_*ger 7 artifacts gitlab gitlab-ci gitlab-ci-runner
我想知道如果提交带有标签,是否有可能将生成工件的作业设置为永不过期,否则它应该过期。目前,它在全球范围内设置为 3 天后到期。但我想要的东西是,如果提交是通过特定的操作完成的tag,并且它运行Job A生成工件,那么它永远不会过期。但对于没有标签的其他提交也应运行相同的Job A操作,并且为此生成的工件应在全局设置的时间内过期。
请参阅GitLab 13.3(2020 年 8 月),这是官方支持的
\n(与“解决方法”相反,expire_in 5 years!)
\n\n将作业工件配置为永不过期
\n作为开发人员,您可以指定作业工件\xe2\x80\x99 的确切到期日期,但在某些情况下您可能需要永久保留工件。
\n\n\n
expire_in现在,您可以通过将的值设置为将工件设置为永不过期never现在,您可以通过在 CI 配置中
OP 澄清:
\n\n\n我有一项针对每次提交运行的作业,并且该作业的工件将在三天内过期,但对于同一个作业,如果有带有标签的提交,我希望工件永远保留。
\n
注意:GitLab 13.4(2020 年 9 月)添加了一个有趣的功能:
\n\n\n锁定最新的作业工件以防止删除
\nGitLab 现在将自动锁定任何活动分支、MR 或标签上成功作业和管道的最新工件,以防止其因过期而被删除。这使得您可以更轻松地设置更积极的过期策略来清理较旧的工件,有助于减少磁盘空间消耗,并确保您\xe2\x80\x99始终从管道中获得最新工件的副本。
\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”,那就更好了
您可以设置每个作业的工件到期时间。
因此,对于使用特定标签的作业,您可以将工件设置为在很长一段时间内过期
job:
tags:
- your_tag
artifacts:
expire_in: 5 yr
Run Code Online (Sandbox Code Playgroud)