从零开始为PHP搭建CI/CD:逐步配置流水线指南

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

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

开始课程

如果你不是机器人,为什么需要CI/CD?

\n\n

想象一下:周五晚上,你刚刚完成了一个功能,通过FTP将代码上传到服务器(是的,这种情况仍然存在),然后……网站崩溃,出现白屏死机。熟悉吗?如果你有一个PHP的CI/CD流水线,一切都会自动发生:测试在推送阶段就会失败,代码不会进入生产环境,而你可以安心地去喝茶。

\n\n

持续集成和持续交付(或部署)不仅仅是时髦的缩写。它们是你个人的助手,负责检查代码、运行测试、进行代码检查、构建工件并部署到服务器。在本文中,我将展示如何使用GitHub Actions从零开始为PHP配置CI/CD流水线。没有抽象概念——只有真实的代码和可用的示例。

\n\n

什么是CI/CD流水线,为什么PHP开发者需要它

\n\n

CI/CD流水线是一系列自动步骤,每次你将代码推送到仓库时都会执行。这对于PHP尤其重要,因为:

\n\n
    \n
  • PHP是一种动态语言,许多错误(拼写错误、类型错误)只在运行时才会出现。
  • \n
  • 部署通常是通过临时方式完成的——通过SCP、rsync甚至FTP(令人心痛)。
  • \n
  • 团队在成长,手动检查成为瓶颈。
  • \n
\n\n

通过配置PHP的CI/CD,你将获得:

\n
    \n
  • 每次推送时的自动测试。
  • \n
  • 代码风格检查(PSR-12,你的内部标准)。
  • \n
  • 自动部署到staging/生产环境。
  • \n
  • 通过Telegram/Slack接收构建状态通知。
  • \n
\n\n

选择工具:为什么是GitHub Actions?

\n\n

有很多选择:Jenkins、GitLab CI、Bitbucket Pipelines、CircleCI。但对于从零开始为PHP配置CI/CD流水线,我推荐GitHub Actions。为什么?

\n\n
    \n
  • 对公共仓库免费(私有仓库每月2000分钟——绰绰有余)。
  • \n
  • 所有内容集中在一处——代码、issues、actions。
  • \n
  • 庞大的现成actions生态系统——无需重复造轮子。
  • \n
\n\n

但如果你使用GitLab——原理相同,只是YAML语法不同。我们开始吧。

\n\n

步骤1:仓库结构和基础文件

\n\n

为了演示,我们以一个典型的基于Laravel的PHP项目为例(但该方法适用于任何框架)。你的结构应该如下所示:

\n\n
my-php-app/\n├── .github/\n│   └── workflows/\n│       └── ci-cd.yml\n├── src/\n├── tests/\n├── composer.json\n├── phpunit.xml\n└── .php_cs.dist (如果你使用PHP-CS-Fixer)
\n\n

创建文件夹.github/workflows/和文件ci-cd.yml——这是你流水线的核心。

\n\n

步骤2:基础YAML——持续集成(CI)

\n\n

我们从简单的开始:每次推送到main或发起pull request时运行测试和代码检查。这是一个最小的PHP的CI/CD流水线:

\n\n
name: PHP CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: '8.2'\n          extensions: mbstring, pdo, sqlite, gd\n          coverage: xdebug\n\n      - name: Install dependencies\n        run: composer install --prefer-dist --no-progress\n\n      - name: Run PHP CS Fixer (Lint)\n        run: vendor/bin/php-cs-fixer fix --dry-run --diff\n\n      - name: Run PHPStan (Static Analysis)\n        run: vendor/bin/phpstan analyse src --level=5\n\n      - name: Run Tests\n        run: vendor/bin/phpunit --coverage-text
\n\n

这里发生了什么?

\n
    \n
  • checkout — 获取代码。
  • \n
  • setup-php —

博客

书籍推荐