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)标准确保代码风格统一。如果任何一个步骤失败,