PHP项目的CI/CD:GitHub Actions从A到Z

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

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

开始课程
以下是您要求的HTML文章简体中文翻译版本: ```html

引言:为什么CI/CD是PHP开发的新标准

现代PHP开发离不开自动化。手动部署、凭肉眼运行测试、在最后关头检查代码,是通往生产环境bug的捷径。CI/CD(持续集成/持续部署)通过将检查与代码部署直接集成到您的工作流程中,解决了这些问题。

GitHub Actions是一个强大且免费的工具,可将CI/CD直接嵌入您的仓库。在本文中,我们将详细讲解如何为Laravel或Symfony上的PHP项目搭建一个完整的流水线:从安装依赖项到部署到服务器。您将获得现成的配置,并理解每个阶段的作用。

1. GitHub Actions基础:PHP的工作流结构

GitHub Actions中的工作流是一个自动化流程,定义在.github/workflows/文件夹中的YAML文件中。对于PHP项目,一个典型的工作流包含:

  • 触发器:推送到main分支、拉取请求。
  • 运行器:Ubuntu最新版(支持PHP)。
  • 步骤:检出代码、设置PHP、Composer、测试、代码检查工具。

我们来看一个最小的ci.yml文件:

name: PHP CI

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

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.2'
        extensions: mbstring, pdo_mysql, xml
        coverage: xdebug

    - name: Install Composer dependencies
      run: composer install --no-progress --prefer-dist

    - name: Run PHPUnit
      run: vendor/bin/phpunit --testdox

这个工作流在每次推送时运行。它会检查代码能否构建以及测试是否通过。请注意shivammathur/setup-php这个动作——它是PHP的事实标准。

2. 高级配置:静态分析、代码检查工具和缓存

CI不仅限于测试。为了维护代码质量,可以添加静态分析(PHPStan、Psalm)和代码风格检查(PHP CS Fixer)。

2.1. 添加PHPStan和PHP CS Fixer

将它们安装为开发依赖:

composer require --dev phpstan/phpstan friendsofphp/php-cs-fixer

在工作流中添加步骤:

    - name: Run PHPStan
      run: vendor/bin/phpstan analyse --memory-limit=1G

    - name: Check code style
      run: vendor/bin/php-cs-fixer fix --dry-run --diff

提示:使用--dry-run仅检查文件,不进行修改。如果风格违规,CI将失败,开发者会进行修复。

2.2. 缓存Composer依赖

每次CI运行都会从头下载包——这很慢。启用缓存:

    - name: Cache Composer packages
      id: composer-cache
      uses: actions/cache@v3
      with:
        path: vendor
        key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-php-

    - name: Install dependencies
      if: steps.composer-cache.outputs.cache-hit != 'true'
      run: composer install --no-progress --prefer-dist

现在后续的运行将快2-3倍。

3. 使用数据库和Docker服务进行测试

许多PHP应用程序需要MySQL、PostgreSQL或Redis来进行测试。GitHub Actions允许您运行服务容器。

3.1. 以MySQL和Laravel为例

假设您的项目使用Laravel和MySQL。添加服务并配置.env:

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQ
```

请注意:您在原文末尾提供的代码片段在`MYSQ`处被截断,因此翻译也在此处结束。如果您需要补全后续内容,请提供完整的原文。                

博客

书籍推荐