GitLab CI运行gulp后保存artifacts时my-build目录为空如何解决
问题原因排查
你的配置存在三个核心错误,共同导致artifacts为空:
- 执行路径错误:你在script中创建
my-build目录后直接cd进入该目录执行后续命令,但你的gulpfile.js、package.json、app/scss源文件全部存放在仓库根目录,cd后process.cwd()变为my-build,gulp既找不到配置文件,也找不到scss源文件,也无法加载项目依赖,相当于执行了空任务,自然不会生成任何产物。 - 依赖安装错误:你在
my-build目录执行npm i,无法读取根目录的package.json,项目依赖的gulp-sass等包没有正确安装,任务实际未正常执行(未抛出阻断流水线的错误导致你误以为执行成功)。 - 路径不匹配:就算gulp任务正常执行,你的配置中编译产物输出路径为根目录下的
public/stylesheets,但artifacts仅配置抓取my-build目录,生成的产物也不会被归档。
修复方案
方法1:调整CI执行逻辑(无需修改gulpfile)
直接使用如下修正后的.gitlab-ci.yml即可:
stages: - build - deploy build-job: stage: build image: node:12.22.6-alpine variables: TZ: "Europe/Stockholm" script: - echo "Compiling the code..." # 根目录安装依赖 - npm i - npm i -g gulp # 根目录执行gulp任务,可正常读取所有源文件和配置 - gulp buildStyles # 创建my-build并将产物移入 - mkdir -p my-build - cp -r public/* my-build/ # 可选添加调试命令:ls -la my-build,方便后续排查路径问题 - echo "Compile complete." artifacts: expire_in: 2 days paths: - my-build allow_failure: false deploy-job: stage: deploy script: - echo "Deploying application..." - echo "Application successfully deployed."
方法2:修改gulp输出路径(可选)
如果不想在CI中执行复制操作,可以直接修改gulpfile.js中的输出路径:
// 仅需调整css.dest配置即可 var css = { src: process.cwd() + '/app/scss/style.scss', dest: process.cwd() +'/my-build/public/stylesheets' };
内容的提问来源于stack exchange,提问作者Stefan Avramovic
相关产品推荐
相关产品推荐

