【问题标题】:Gitlab ci issue with passing artifacts to Downstream pipeline with trigger and needs keywordsGitlab ci问题将工件传递到带有触发器和需要关键字的下游管道
【发布时间】: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 部分?如果是这样,下游管道只能从 已完成 管道中获取工件。所以如果没有,它会显示这个错误

标签: gitlab gitlab-ci pipeline gitlab-pipelines


【解决方案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 步骤中缺少任何东西。
      猜你喜欢
      • 2023-01-04
      • 2020-09-20
      • 1970-01-01
      • 2022-07-22
      • 2021-08-02
      • 2022-01-09
      • 2020-06-15
      • 2021-03-16
      • 2021-10-04
      相关资源
      最近更新 更多