PHP项目使用GitHub Actions实现CI/CD入门
现代PHP应用程序开发离不开自动化。手动测试和部署不仅耗时,而且容易出错。CI/CD(持续集成/持续部署)通过自动化代码检查和服务器交付解决了这些问题。其中最流行的工具之一是GitHub Actions。
GitHub Actions是一个内置的工作流自动化平台,允许您直接从GitHub仓库运行测试、代码检查工具、构建和部署。本文将介绍如何为PHP项目配置完整的CI/CD流水线:从简单的测试运行到自动部署到生产服务器。
我们将以Laravel为例,但所有原则都适用于任何PHP框架(Symfony、Yii、WordPress等)。您将学习如何编写YAML配置、使用测试矩阵、缓存依赖项以及安全地部署代码。
主体部分
1. GitHub Actions基础:workflow结构
Workflow是一个自动化流程,由特定事件(push、pull request、创建标签)触发。每个workflow由一个YAML文件描述,该文件存储在仓库的.github/workflows/目录中。
文件.github/workflows/ci.yml的基本结构:
name: CI Pipeline
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: test: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, xml, bcmath, pdo_mysql coverage: xdebug
- name: Install dependencies run: composer install --no-progress --prefer-dist
- name: Run PHPUnit tests run: vendor/bin/phpunit --coverage-text关键元素解析:
on— 触发器:推送到main/develop分支,向main分支发起pull request。jobs— 一组任务(job),可并行或顺序执行。runs-on— 运行环境操作系统(通常为ubuntu-latest)。steps— job内的步骤序列。uses— 来自市场的现成actions(例如shivammathur/setup-php)。run— 执行shell命令。
2. 高级配置:测试矩阵与缓存
对于大型项目,同时测试多个PHP版本和依赖项非常有用。这可以通过矩阵策略(matrix strategy)实现。同时,缓存Composer的vendor文件夹也很重要,可以加速workflow的执行。
包含矩阵和缓存的示例:
name: Advanced CI
on: [push, pull_request]
jobs: test: runs-on: ubuntu-latest strategy: matrix: php: [ '8.1', '8.2', '8.3' ] dependency-stability: [ prefer-stable, prefer-lowest ]
steps: - uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} extensions: mbstring, pdo, gd coverage: none
- name: Cache Composer packages uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-${{ matrix.php }}-composer-
- name: Install dependencies run: composer install --${{ matrix.dependency-stability }} --no-interaction
- name: Run test