PHP项目的CI/CD:GitHub Actions高级应用

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

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

开始课程

引言:从基础CI/CD到生产级别



仅仅运行测试的基础CI/CD流水线固然不错。但对于严肃的PHP项目来说,这还不够。在实际开发中,需要依赖缓存以加速构建、并行任务、针对不同PHP版本的矩阵构建、静态分析,当然还有自动部署。在本文中,我们将通过实际示例,深入探讨为PHP项目配置GitHub Actions的高级技巧。



我们假设您已经熟悉YAML语法基础和.github/workflows的基本结构。现在,让我们进入优化和功能扩展阶段。



1. 加速构建:Composer缓存与最优策略



每次运行工作流都会重新下载依赖项。这需要1-3分钟,而通过缓存可以缩短到5-10秒。



智能缓存vendor目录



使用actions/cache,键值基于composer.lock文件的哈希值。如果锁定文件未更改,则从缓存恢复依赖项。



name: PHP CIon: [push, pull_request]

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' tools: composer:v2

- name: Cache Composer dependencies 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 --no-progress --prefer-dist


请注意restore-keys:如果未找到精确的键,将使用该操作系统的最新缓存。这在切换分支时提供了保障。



针对不同PHP版本的矩阵构建



为确保兼容性,请并行测试多个PHP版本:



jobs:  test:    strategy:      matrix:        php-version: ['8.1', '8.2', '8.3']        dependency-stability: [prefer-lowest, prefer-stable]

steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }}

- name: Cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }}

- name: Install dependencies run: | composer update --${{ matrix.dependency-stability }} --prefer-dist --no-interaction

- name: Run tests run: vendor/bin/phpunit


这种方法能在合并到主分支之前就发现兼容性问题。您将获得6个并行任务(3个版本 × 2种稳定性策略)。



2. 高级阶段:静态分析与代码质量



单元测试并非唯一的质量控制工具。我们加入PHPStan(最高分析级别)和PHP Code Sniffer。



代码检查与静态分析



创建一个独立的分析任务,与测试并行执行:



jobs:  static-analysis:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: shivammathur/setup-php@v2        with:          php-version: '8.2'          coverage: none

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

- run: composer install --no-interaction --prefer-dist

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

- name: PHPCS run: vendor/bin/phpcs --standard=PSR12 src/

博客

书籍推荐