PHP 项目的 CI/CD:从零开始配置 GitHub Actions

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
```html

PHP 项目的 CI/CD:配置 GitHub Actions



现代 PHP 开发离不开测试、构建和部署流程的自动化。CI/CD(持续集成 / 持续部署)使团队能够更快地发布更新、减少错误数量并保持高代码质量。本文将详细介绍如何使用 GitHub Actions(GitHub 内置的自动化工具)为 PHP 项目配置 CI/CD 管道。



我们将探讨流行框架(Laravel、Symfony)的实际示例,学习如何运行测试、检查代码风格、构建工件以及自动部署到服务器。本文对希望优化工作流程的新手和经验丰富的开发者都很有帮助。



1. PHP 的 GitHub Actions 基础



GitHub Actions 是一个直接在仓库中自动化工作流程的平台。Workflow 用 YAML 文件描述,这些文件存储在 .github/workflows/ 目录中。每个 workflow 由一个或多个 job 组成,这些 job 在特定事件(push、pull request、release 等)发生时在虚拟机(runner)上执行。



对于 PHP 项目,关键步骤通常包括:



  • 通过 Composer 安装依赖
  • 配置环境(PHP 版本、扩展、数据库)
  • 运行静态分析(PHPStan、Psalm)
  • 执行单元测试(PHPUnit、Pest)
  • 检查代码风格(PHP CS Fixer、Laravel Pint)
  • 构建并发布 Docker 镜像
  • 部署到生产/预发布服务器


PHP 项目的最小 workflow 如下所示:



name: PHP CI

on: push: branches: [ main ] pull_request: branches: [ main ]

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, intl, pdo_mysql coverage: xdebug - name: Install dependencies run: composer install --prefer-dist --no-progress - name: Run tests run: vendor/bin/phpunit --testdox


这个 workflow 在每次推送到 main 分支或创建 pull request 时触发。它检查代码是否符合标准并执行测试。



2. 高级配置:测试、代码检查与静态分析



实际项目需要更深入的代码质量检查。我们以 Laravel 框架为例,展示一套完整的工具集。



创建文件 .github/workflows/laravel-ci.yml:



name: Laravel CI/CD

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: quality: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 env: MYSQL_DATABASE: testing MYSQL_USER: user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

steps: - uses: actions/checkout@v4

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, intl, pdo_mysql, bcmath, redis coverage: pcov tools: composer:v2

- name: Copy .env run: | cp .env.example .env php artisan key:generate

- name: Install dependencies run: composer install --no-interaction --prefer-dist

- name: Run Laravel Pint (Code Style) run: vendor/bin/pint --test

- name: Run PHPStan (Static Analysis) run: vendor/bin/phpstan analyse --memory-limit=2G

```

博客

书籍推荐