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

GitHub Actions执行npm run ci-test报错:unsafe-perm in lifecycle true

解决GitHub Actions中npm run ci-test执行失败的问题

先结合你给出的错误信息和配置文件,我梳理了几个可能的问题点,逐个给你解决思路:

1. 数据库名称不匹配(最可能的直接诱因)

你在GitHub Actions的mysql服务里已经初始化了somedb数据库(MYSQL_DATABASE: somedb),甚至额外加了手动创建somedb的步骤,但执行ci-test时的环境变量里,DATABASE_DATABASE却设成了some-b——这会导致测试代码尝试连接一个不存在的数据库,直接触发报错。

修复方法:把ci.yml里npm run ci-test步骤的DATABASE_DATABASE值改成somedb,和实际创建的数据库名保持一致:

env:
  DATABASE_HOST: 127.0.0.1
  DATABASE_USER: root
  DATABASE_PASSWORD: password
  DATABASE_DATABASE: somedb  # 此处修正为somedb
  DATABASE_DIALECT: mysql
  DATABASE_LOGGER: true
  PORT: 8080

2. Node.js版本过低导致依赖兼容问题

你当前使用的是Node.js 12.x,而Jest 29及以上的新版本已经不再支持Node.js 12。如果你的项目依赖的Jest版本较新,这会直接导致测试无法正常启动。

修复方法:升级Node.js版本到16.x或18.x,同时建议把actions/setup-node的版本从v1升级到最新的v4(v1已停止维护):

- name: Use Node.js
  uses: actions/setup-node@v4
  with:
    node-version: '18.x'

3. 环境变量设置的兼容性优化

你的package.json里的ci-test命令用了NODE_ENV=test的写法,这在Linux/macOS环境下没问题,但如果后续切换到Windows环境或者遇到非bash的shell,可能会出现执行错误。更稳妥的方式是用cross-env包统一管理环境变量:

修复步骤:

  1. 安装cross-env开发依赖:
    npm install cross-env --save-dev
    
  2. 修改package.json里的ci-test命令:
    "ci-test": "cross-env NODE_ENV=test jest --forceExit"
    

4. 验证测试代码的数据库连接逻辑

最后,确认你的测试代码确实在正确读取这些环境变量来建立数据库连接——比如检查代码里是否正确获取了DATABASE_HOST、DATABASE_USER等参数,没有硬编码错误的数据库信息。

如果修改后仍有问题,建议贴出npm run ci-test的完整错误日志,这样能更精准定位剩余问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:48:15