如何使用GitHub Actions为Laravel项目配置CI/CD? (自动化测试与部署)

发布时间 - 2026-01-14 00:00:00    点击率:
Laravel项目在GitHub Actions中常卡在composer install,因Ubuntu runner的PHP版本或扩展不匹配;需用actions/setup-php指定版本和扩展,跳过平台检查,配置MySQL/Redis服务并正确设置host,部署用ssh+rsync配合Secrets,phpunit失败多因autoload未生效。

为什么 Laravel 项目在 GitHub Actions 中常卡在 composer install

因为默认 Ubuntu runner 的 PHP 版本往往不匹配 composer.json 中的 platform.php 声明,或缺少扩展(如 ext-pdo_mysqlext-redis)。Laravel 测试还依赖 phpunit 和正确配置的 .env

  • 显式指定 PHP 版本:用 actions/setup-php@v4,并传入 php-versionextensions
  • 跳过平台检查(仅限 CI):composer install --no-interaction --prefer-dist --optimize-autoloader --ignore-platform-req=ext-*
  • echo 写入测试专用 .env,确保 DB_CONNECTION=sqlite 或配好 MySQL 服务

如何在 GitHub Actions 中启动 MySQL 和 Redis 服务?

GitHub Actions 支持 services,但 Laravel 默认用 localhost 连接,而 services 实际运行在 Docker 网络中,需用 service 名作 host。MySQL 默认 root 密码为空,Redis 无需密码。

services:
  mysql:
    image: mysql:8.0
    env:
      MYSQL_ROOT_PASSWORD: ""
      MYSQL_DATABASE: testdb
    ports:
      - 3306:3306
    options: >-
      --health-cmd="mysqladmin ping -h localhost -u root --password=''"
      --health-interval=10s
      --health-timeout=5s
      --health-retrie

s=3 redis: image: redis:7-alpine ports: - 6379:6379
  • MySQL host 应设为 mysql(service 名),不是 localhost
  • .env.testing 中写 DB_HOST=mysqlREDIS_HOST=redis
  • wait-for-it.sh 或自定义脚本轮询 mysql:3306 就绪,避免 phpunit 启动时连接失败

如何安全地部署到生产服务器(SSH + rsync)?

GitHub Actions 本身不执行远程部署命令,需靠 ssh + rsync 组合完成。私钥不能硬编码,必须存为 Secrets(如 DEPLOY_SSH_KEY),且目标服务器需提前配置好 SSH 免密登录与目录权限。

  • webfactory/ssh-key-action@v2 注入私钥到 runner 的 ~/.ssh/id_rsa
  • 部署前先 rsync -avz --delete . user@host:/var/www/myapp/ --exclude=".git" --exclude="node_modules"
  • 关键命令必须分步执行:拉代码 → 安装依赖 → 运行 php artisan migrate:fresh --seed(仅限测试环境)→ php artisan config:clear && php artisan cache:clear
  • 生产环境禁止自动执行 migrate,应人工确认或走 DB 变更审批流程

phpunit 在 Actions 中报 Class 'Tests\TestCase' not found 怎么办?

这是自动加载未生效的典型表现,根源通常是 composer autoload 没跑,或 phpunit.xmlbootstrap 路径错误。Laravel 10+ 默认用 ./vendor/autoload.php,但 CI 中可能因路径或缓存失效导致失败。

  • 确保 composer install 成功后,再运行 vendor/bin/phpunit
  • 检查 phpunit.xml 是否存在,它能暴露隐藏的致命错误
  • 加一步验证:php -r "require 'vendor/autoload.php'; echo class_exists('Tests\TestCase') ? 'OK' : 'FAIL';"
  • 若用 Pest,确认 pest 二进制已安装(composer require --dev pestphp/pest --with-all-dependencies

环境变量、服务依赖顺序、PHP 扩展缺失——这些不是配置项,是每次 push 都会触发的硬性校验点。漏掉任意一个,CI 就会静默失败或测试假通过。


# mysql  # php  # word  # laravel  # redis  # js  # bootstrap  # git  # json  # node  # composer  # echo  # for  # require  # xml  # class  # var  # delete  # github  # docker  # sqlite  # ubuntu  # ssh  # 自动化  # 仅限  # 跳过  # 卡在  # 需用  # 不匹配  # 这是  # 就会  # 设为  # 自定义  # 它能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel Session怎么存储_Laravel Session驱动配置详解  黑客如何通过漏洞一步步攻陷网站服务器?  JS去除重复并统计数量的实现方法  高防服务器租用指南:配置选择与快速部署攻略  浅谈javascript alert和confirm的美化  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  电商网站制作价格怎么算,网上拍卖流程以及规则?  JavaScript常见的五种数组去重的方式  长沙做网站要多少钱,长沙国安网络怎么样?  *服务器网站为何频现安全漏洞?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  教你用AI将一段旋律扩展成一首完整的曲子  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  node.js报错:Cannot find module 'ejs'的解决办法  使用C语言编写圣诞表白程序  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何记录自定义日志?(Log频道配置)  如何续费美橙建站之星域名及服务?  Laravel观察者模式如何使用_Laravel Model Observer配置  如何在橙子建站中快速调整背景颜色?  简单实现Android文件上传  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何在Windows环境下新建FTP站点并设置权限?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  javascript日期怎么处理_如何格式化输出  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何挑选优质建站一级代理提升网站排名?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何用IIS7快速搭建并优化网站站点?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速搭建高效可靠的建站解决方案?  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何用wdcp快速搭建高效网站?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层