PHP项目的CI/CD:GitHub Actions从入门到精通

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

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

开始课程

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

博客

书籍推荐