You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无GitLab API权限,如何在.gitlab-ci.yml中删除合并请求删除后的作业制品?

无GitLab API权限下,MR删除后的制品清理方案

因为GitLab没有把「合并请求删除」作为流水线触发事件,也没有提供CI脚本直接删除远程制品的内置命令,所以仅靠.gitlab-ci.yml没法在MR删除后主动触发制品删除操作,但可以用以下替代方案实现自动清理:

1. 给MR作业的制品设置自动过期(最推荐)

这是最直接且无需额外操作的方法,直接在作业配置里通过expire_in字段指定制品的过期时间,GitLab会自动在到期后清理远程仓库里的制品。你可以根据MR的生命周期设置时长,比如1周(足够查看验证,过期后自动清理):

mr_build_job:
  only:
    - merge_requests
  script:
    - # 你的作业执行脚本,比如编译、打包等
  artifacts:
    paths:
      - ./dist/ # 替换成你的制品路径
    expire_in: 1 week

如果需要更精准,也可以设置成3 days或者2 weeks,完全按需调整。

2. 利用MR关闭事件清理本地制品(辅助)

MR删除前通常会先进入「关闭」状态,这个状态可以触发流水线作业。你可以新增一个清理作业,在MR关闭时执行,删除runner本地生成的制品文件(但远程仓库的制品还是得靠expire_in清理):

cleanup_mr_local_artifacts:
  only:
    - merge_requests
  script:
    - rm -rf ./dist/ # 删除本地生成的制品文件
  rules:
    - if: '$CI_MERGE_REQUEST_STATE == "closed"'
  when: manual # 建议设为手动,避免误删有用的制品

这个方法只能清理runner本地的文件,远程制品还是依赖自动过期策略,适合临时文件的快速清理。

3. 作业结束后立即清理本地文件(可选)

如果你的制品只是作业过程中临时使用,不需要保留,可以在作业脚本末尾直接删除生成的文件,减少runner磁盘占用,再配合短时间的expire_in让远程制品快速过期:

mr_build_job:
  only:
    - merge_requests
  script:
    - npm run build # 生成制品的命令
    - rm -rf ./dist/ # 作业结束前删除本地文件
  artifacts:
    paths:
      - ./dist/
    expire_in: 1 day

核心总结

没有GitLab API权限的情况下,设置制品自动过期是唯一能可靠清理远程制品的方案,其他方法只能辅助清理本地文件。通过expire_in配置,完全不需要额外操作,GitLab会自动处理过期制品的清理。

内容的提问来源于stack exchange,提问作者Oliver S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:42