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 输出发送到工件模块