引言:为什么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`处被截断,因此翻译也在此处结束。如果您需要补全后续内容,请提供完整的原文。