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

Laravel Sail CI/CD测试通过但部署失败问题求助

Laravel Sail CI/CD测试通过但任务报错排查

我是CI/CD新手,正在使用基于Docker构建的Laravel Sail项目,尝试搭建一套先执行测试再部署的CI流程,配置内容如下:

stages:
  - test
  - deploy

test-development:
  stage: test
  environment:
    name: Development
  only:
    - main
  before_script:
    - echo "Start testing..."
  script:
    - cd ~/$CI_PROJECT_NAME
    - git pull
    - if [ ! -f .env.testing ]; then cp .env.testing.example .env.testing; fi
    - ./vendor/bin/sail artisan config:cache
    - ./vendor/bin/sail artisan test --env=testing

development:
  stage: deploy
  environment:
    name: Development
  when: on_success
  only:
    - main
  dependencies:
    - test-development
  before_script:
    - echo "Start deploying..."
  script:
    - cd ~/$CI_PROJECT_NAME
    - if [ ! -f .env ]; then cp .env.example .env; fi
    - ./vendor/bin/sail npm install
    - ./vendor/bin/sail artisan migrate
    - ./vendor/bin/sail npm run build
    - ./vendor/bin/sail artisan config:cache
    - ./vendor/bin/sail artisan config:cache
    - ./vendor/bin/sail artisan route:cache
    - ./vendor/bin/sail artisan view:cache
    - ./vendor/bin/sail artisan optimize
    - ./vendor/bin/sail artisan queue:restart
    - ./vendor/bin/sail artisan storage:link

执行该流程时,测试结果显示8个测试全部通过,但测试任务仍报错“ERROR: Job failed: exit status 1”,导致部署阶段无法执行。


可能的问题及修复方案

  • 移除不必要的git pull与路径跳转命令
    CI流水线会自动克隆最新代码到默认工作目录,无需手动执行git pull;且~/$CI_PROJECT_NAME路径在CI环境中大概率不存在,直接使用默认工作目录即可。手动执行git pull可能因本地存在未提交修改、权限不足返回非0状态码,导致任务失败。

修改测试阶段的script:

script:
  - if [ ! -f .env.testing ]; then cp .env.testing.example .env.testing; fi
  - ./vendor/bin/sail artisan key:generate --env=testing
  - ./vendor/bin/sail artisan config:clear
  - ./vendor/bin/sail artisan test --env=testing
  • 修复测试环境配置缺失问题
    复制.env.testing.example后,文件可能缺少APP_KEY等核心配置项,导致config:cache执行失败。测试环境无需缓存配置,建议移除测试阶段的config:cache,改用config:clear,同时生成测试环境的APP_KEY。

  • 确保Sail容器正常运行
    Laravel Sail的artisan命令依赖Docker容器,需在测试阶段提前启动服务:

before_script:
  - echo "Start testing..."
  - ./vendor/bin/sail up -d
  • 排查隐藏命令错误
    开启命令执行日志,查看测试阶段所有命令的返回状态,避免错误被测试输出覆盖。可在script开头添加set -x显示执行细节:
script:
  - set -x
  - if [ ! -f .env.testing ]; then cp .env.testing.example .env.testing; fi
  - ./vendor/bin/sail artisan key:generate --env=testing
  - ./vendor/bin/sail artisan config:clear
  - ./vendor/bin/sail artisan test --env=testing

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:04:59