GitLab CI/CD构建Gatsby项目时找不到generatetranslateFiles.js脚本
问题描述
我正在搭建CI/CD流水线,将多语言架构的Gatsby项目部署到服务器。编写了自定义脚本generatetranslateFiles.js,用于从数据库拉取键值生成各语言JSON文件,该脚本放在translator文件夹下。
我在package.json中尝试了两种路径配置的npm脚本:
"scripts": { "translator": "node ./translator/generatetranslateFiles.js" }
最初的配置是:
"scripts": { "translator": "node translator/generatetranslateFiles.js" }
但两种配置下,GitLab CI/CD的install-job均提示找不到该脚本。本地执行gitlab-runner exec shell install-job能成功运行脚本,但流水线中始终报错。我的.gitlab-ci.yml内容如下:
image: node:16.17.0-alpine cache: paths: - node_modules/ - locales/ stages: - install - build install-job: stage: install script: - npm install - npm run translator artifacts: paths: - node_modules - locales expire_in: 1 hour build-job: stage: build script: - npm run build artifacts: paths: - public expire_in: 1 hour
排查与解决步骤
1. 确认脚本已被Git追踪
CI环境拉取的是仓库中的代码,如果translator/generatetranslateFiles.js未被添加到Git,流水线里自然找不到文件:
- 本地执行
git status,检查该文件是否在未追踪列表 - 若未追踪,执行
git add translator/generatetranslateFiles.js,提交后推送到仓库
2. 打印CI环境的目录结构
在CI脚本中先输出当前工作目录和文件列表,确认脚本路径是否正确:
修改install-job的script部分:
install-job: stage: install script: - pwd - ls -la translator/ - npm install - npm run translator
通过输出结果可以直接看到CI环境中是否存在目标脚本,快速定位路径问题。
3. 跳过npm脚本直接执行
绕开npm的路径解析,在CI脚本中直接执行脚本,排查是否是npm脚本的路径配置问题:
修改install-job的script:
install-job: stage: install script: - npm install - node ./translator/generatetranslateFiles.js
4. 检查文件名大小写
Alpine Linux是严格区分大小写的,如果你本地用的是Windows(不区分大小写),可能存在文件名大小写不一致的情况(比如本地是GenerateTranslateFiles.js,仓库里是generatetranslateFiles.js),导致本地能跑但CI找不到。
- 确认本地和仓库中的脚本文件名大小写完全一致
5. 清理CI缓存重试
旧缓存可能残留错误的目录结构,尝试清理缓存后重新运行流水线:
- 进入GitLab项目的「CI/CD」→「缓存」页面,手动清理现有缓存
- 或者修改
.gitlab-ci.yml的缓存配置,新增key强制刷新缓存:
cache: key: ${CI_COMMIT_REF_SLUG}-v2 paths: - node_modules/ - locales/
内容的提问来源于stack exchange,提问作者José Luna

