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

GitLab CI流水线如何跨阶段传递制品?求解文件夹缺失问题

解决GitLab CI阶段间制品传递不完整的问题

看起来你的问题核心是build阶段生成的两个文件夹,其中一个没能正确传递到package阶段,虽然日志显示制品已下载,但实际在package阶段找不到目标文件夹。我们一步步排查和解决:

1. 先确认build阶段的文件生成与制品配置是否正确

首先要确保build阶段确实生成了目标文件夹,并且制品配置准确包含了它:

优化build阶段的配置,添加验证步骤

修改你的build阶段脚本,增加目录验证命令,同时调整制品配置(建议去掉untracked: true,因为明确指定paths更可控,避免引入不必要的文件):

stages:
  - build
  - package
build:
  stage: build
  image: node:12
  script:
    - npm ci
    - npm run build
    # 新增:验证两个文件夹是否存在并查看内容
    - ls -la folder/for/project
    - ls -la folder/that/was/not/there/before/build/time
  artifacts:
    paths:
      # 路径末尾加/明确表示包含整个文件夹及其内容
      - folder/for/project/
      - folder/that/was/not/there/before/build/time/
    # 可选:设置制品过期时间,自动清理旧文件
    expire_in: 1 week
    # 去掉untracked: true,避免包含无关的未追踪文件

如果这一步的日志显示目标文件夹不存在,说明是npm run build的问题,需要先排查构建脚本是否正确生成了该目录;如果存在,继续下一步。

2. 验证package阶段是否真的接收到了制品

在package阶段开头添加目录查看命令,确认下载的制品是否到位:

package:
  stage: package
  image: docker:stable
  services:
    - docker:dind
  needs:
    - build
  script:
    # 新增:查看当前目录下的所有文件/文件夹
    - ls -la
    # 单独检查目标文件夹
    - ls -la folder/that/was/not/there/before/build/time
    - export DOCKER_HOST=tcp://docker:2375/
    - docker build -t my-project .

两种可能的结果:

  • 如果ls显示目标文件夹不存在:说明GitLab CI的制品传递有问题,检查以下几点:
    • 路径拼写是否完全一致(Linux环境区分大小写,比如Folder和folder是不同的);
    • 如果目标文件夹是空的,GitLab CI默认不会将空文件夹加入制品,你可以在build阶段生成一个占位文件强制包含:
      # 在build的script里添加:
      - mkdir -p folder/that/was/not/there/before/build/time && touch $_/.keep
      
  • 如果ls显示目标文件夹存在,但docker build时找不到:问题出在Dockerfile的配置上,继续下一步。

3. 检查Dockerfile的上下文与COPY命令

当你执行docker build -t my-project .时,.表示当前工作目录(也就是GitLab CI的项目根目录),Docker会基于这个目录作为构建上下文。

确保你的Dockerfile里的COPY命令正确指向了目标文件夹,比如:

# 正确的写法:复制整个目标文件夹到容器内的指定路径
COPY folder/that/was/not/there/before/build/time /app/target-folder/

# 错误示例:路径拼写错误、大小写不匹配,或者使用了错误的相对路径
# COPY folder/that/was/missing /app/target-folder/

总结

通过以上三步,你可以快速定位问题:要么是build阶段的制品配置/文件生成有问题,要么是package阶段的Dockerfile路径错误。优先通过ls命令验证文件存在性,再针对性调整配置即可。

内容的提问来源于stack exchange,提问作者penny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:33:13