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
相关产品推荐
相关产品推荐

