Gitlab ci问题将工件传递到带有触发器和需要关键字的下游管道

Posted

技术标签:

【中文标题】Gitlab ci问题将工件传递到带有触发器和需要关键字的下游管道【英文标题】:Gitlab ci issue with passing artifacts to Downstream pipeline with trigger and needs keywords 【发布时间】:2021-05-27 02:01:30 【问题描述】:

我正在处理多管道项目,并使用trigger 关键字触发下游管道,但无法传递上游项目中创建的工件。我正在使用needs 来获取如下工件:

获取工件的下游管道块:

    needs:
        - project: workspace/build
          job: build
          ref: master
          artifacts: true

要触发的上游管道块:

    build:
      stage: build
      artifacts:
        paths:
          - ./policies
        expire_in: 2h
      only:
        - master
      script:
        - echo 'Test'
      allow_failure: false
    
    triggerUpstream:
      stage: deploy
      only:
        - master
      trigger:
        project: workspace/deploy

但出现错误:This job depends on other jobs with expired/erased artifacts:

没有任何线索,请帮忙。

【问题讨论】:

也许您修改了触发器的strategy 部分?如果是这样,下游管道只能从 已完成 管道中获取工件。所以如果没有,它会显示这个错误 【参考方案1】:

看起来在管道之间以及项目之间共享工件存在问题。这是已知的错误,已在此处报告:

https://gitlab.com/gitlab-org/gitlab/-/issues/228586

您可以在那里找到一种解决方法,但由于它需要向项目添加访问令牌,因此它不是最佳解决方案。

【讨论】:

【参考方案2】:

这不是过期工件的问题,错误是不正确的。就我而言,我可以直接从已执行作业的 UI 中以 zip 格式下载工件。我的 expire_in 设置为 1 week 但我仍然收到此消息。

【讨论】:

【参考方案3】:

您的上游管道作业“构建”设置为仅将其工件存储 2 小时(来自 expire_in: 2h 行。您的下游管道必须至少比创建工件晚 2 小时运行,因此工件已过期并且被删除,产生了那个错误。

要解决这个问题,您可以将expire_in 字段更新为您需要它们处于活动状态的时间(例如,如果您知道下游管道将在 5 天后运行,请将其设置为 5d 持续 5 天) ,或重新运行构建作业以重新创建工件。

您可以从the docs 阅读更多关于expire_in 关键字和一般工件的信息

【讨论】:

感谢您的回复,但也尝试过expire_in: never,但仍然是同样的问题。此外,错误地它没有显示它缺少哪个工件,所以只是想知道我是否在needs 步骤中缺少任何东西。

以上是关于Gitlab ci问题将工件传递到带有触发器和需要关键字的下游管道的主要内容,如果未能解决你的问题,请参考以下文章

将 GitLab CI CD 管道的 .text 输出发送到工件模块

GitLab 多个运行器,交换工件

如何将值传递给 Gitlab CI 作业

如何将工件传递到另一个阶段?

如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载

Gitlab CI 中缓存/工件的正确用法是啥?