PHP 项目的 CI/CD:GitHub Actions 完全指南

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

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

开始课程

PHP项目的CI/CD:GitHub Actions



现代Web开发离不开自动化。手动运行测试、检查代码风格和部署到服务器既耗时又容易出错。解决方案是CI/CD(持续集成/持续部署)。在本文中,我们将介绍如何使用GitHub Actions为PHP项目配置完整的流水线。您将学习如何在每次推送到仓库时自动测试代码、检查代码质量并部署到生产服务器。



什么是CI/CD,为什么PHP开发者需要它?

持续集成(CI)是一种实践,每次提交都会自动检查:运行单元测试、代码检查工具、安全检查。持续部署(CD)是下一步,通过CI的代码会自动部署到服务器(staging或production)。

这对PHP尤其重要:该语言是动态的,类型错误和语法错误通常只在运行时才会被发现。GitHub Actions允许您配置一个流水线,它可以:

  • 在不同PHP版本(7.4、8.0、8.1、8.2)下运行PHPUnit测试。
  • 使用PHP_CodeSniffer或PHPStan检查代码。
  • 通过SSH或Docker部署到服务器。


在GitHub Actions中创建workflow

首先,在PHP项目的根目录下创建.github/workflows目录。在里面创建一个文件,例如ci.yml。这就是您的流水线。

我们来看一个基本的CI示例。它会在每次推送到main分支或创建Pull Request时运行。



name: PHP CI

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

jobs: build: runs-on: ubuntu-latest

strategy: matrix: php-versions: ['7.4', '8.0', '8.1', '8.2']

steps: - uses: actions/checkout@v3

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} tools: composer, phpunit

- name: Validate composer.json and composer.lock run: composer validate --strict

- 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 run: composer install --prefer-dist --no-progress

- name: Run PHPUnit tests run: phpunit --configuration phpunit.xml


关键点解析:

  • Matrix strategy — 允许同时在多个PHP版本上运行测试。这确保了代码的兼容性。
  • shivammathur/setup-php — 一个流行的用于配置PHP环境的action。它会安装所需的PHP版本、Composer和PHPUnit。
  • 缓存vendor — 加速后续运行,避免重新下载依赖。
  • composer validate — 检查composer.json的正确性。


添加静态分析和代码检查

测试很好,但代码质量控制也必不可少。我们在同一个workflow中(或创建一个单独的job)添加使用PHPStan和PHP_CodeSniffer的检查。



    - name: Run PHPStan      run: vendor/bin/phpstan analyse src tests --level=max

- name: Run PHP_CodeSniffer run: vendor/bin/phpcs --standard=PSR2 src tests


这些步骤可以在安装依赖后添加。PHPStan使用max级别会找出潜在的类型错误,而PHP_CodeSniffer使用PSR-2(或PSR-12)标准确保代码风格统一。如果任何一个步骤失败,

博客

书籍推荐