Ubuntu PHP如何进行持续集成
小樊
41
2025-12-04 15:55:36
Ubuntu 上搭建 PHP 持续集成的最佳实践
一 方案总览与选型
- 自建服务器方案:在 Ubuntu 上部署 Jenkins,通过 GitLab Webhook 触发流水线,适合需要私有化、可深度定制与多系统集成(如制品库、部署平台)的团队。
- 云端方案:使用 GitHub Actions 或 GitLab CI,在代码推送时自动运行测试与部署,配置简单、维护成本低,适合托管在公有云上的项目。
- 轻量替代:使用 Travis CI 或 CircleCI 等 SaaS CI,快速接入,适合中小型项目或开源项目。
二 自建 Jenkins 流水线
- 环境与 PHP 准备
- 安装 Jenkins(Ubuntu 建议使用官方 APT 仓库),启动后安装插件:GitLab、Generic Webhook Trigger、Pipeline。
- 安装 PHP 及常用扩展(按项目需要增减):sudo apt install -y php php-mysql php-gd php-zip php-curl php-fpm。
- 触发与权限
- 在 GitLab 项目设置中创建 Webhook,URL 形如:http:///generic-webhook-trigger/invoke,并生成 Secret Token。
- 在 Jenkins 的 Generic Webhook Trigger 中配置 Token,解析 JSON 参数(如 ref、commit ID)用于分支判断与构建定位。
- 流水线关键实践
- 动态分支触发:从 env.ref 中截取分支名(如将 refs/heads/main 转为 main),避免无效分支触发全量构建。
- 质量门禁:执行 PHPUnit 单元测试、静态检查(如 PHP_CodeSniffer)、代码度量(如 phploc),失败即阻断合并。
- 缓存加速:对 Composer 依赖做缓存(如按分支或提交哈希缓存 vendor/),显著缩短安装耗时。
- 制品与部署:构建产物(如 phar、zip、或 Docker 镜像)上传制品库(如 Nexus/Registry),再按分支/标签执行部署到 测试/预发/生产。
- 状态回写:构建结束后调用 GitLab API 更新提交状态(pending/success/failed),提升协作可视化。
- 参考片段
- Jenkinsfile(核心思路)
- 解析分支:def branch = env.ref.replace(“refs/heads/”, “”)
- 拉取代码:git branch: branch, url: ‘https://gitlab.com/your-project.git’
- 质量门禁:composer install --no-dev --optimize-autoloader;php vendor/bin/phpunit --coverage-text
- 缓存:cache key: “${CI_COMMIT_REF_SLUG}” paths: - vendor/
- 状态回写:构建成功/失败分别调用 GitLab API 更新状态
- GitLab Webhook 配置要点:选择 Push events,设置 Secret Token,Payload 传递 ref 与 commit SHA 供 Jenkins 解析
三 云端 CI 示例
- GitHub Actions(适用于托管在 GitHub 的项目)
- 在 .github/workflows/ci.yml 中定义:
- 触发事件:on: [push, pull_request]
- 运行环境:runs-on: ubuntu-latest
- 步骤:actions/checkout@v4;shivammathur/setup-php@v2 设置 PHP 版本 与 Composer;composer install;vendor/bin/phpunit
- 可选:上传 覆盖率报告 到 Codecov 等服务,用于质量看板。
- GitLab CI(适用于托管在 GitLab 的项目)
- 在项目根目录创建 .gitlab-ci.yml:
- 定义 stages:如 build、test、deploy
- cache:key: ${CI_COMMIT_REF_SLUG} paths: - vendor/
- test 阶段:执行 php vendor/bin/phpunit 并收集结果
- 部署阶段:按分支/标签条件执行 rsync/ssh 或镜像推送
- 优点:与代码托管深度集成、配置即代码、易于团队协作。
四 PHP 项目质量与可维护性要点
- 测试与覆盖
- 使用 PHPUnit 编写单元测试,并在 CI 中强制执行;可生成 HTML 覆盖率报告 供审查与度量。
- 代码规范与静态分析
- 采用 PSR-1/PSR-2/PSR-4 规范;使用 PHP_CodeSniffer 做风格检查,必要时结合其他静态分析工具,统一团队代码风格并降低维护成本。
- 运行环境与依赖管理
- 在 Ubuntu 上通过包管理器安装 PHP 及扩展,按项目需求调整配置(如内存、上传限制等);使用 Composer 管理第三方依赖,保证可重复构建与可移植性。
- 持续集成流程规范
- 每次提交触发构建与测试,合并前必须通过质量门禁;将测试、报告、部署流程纳入版本化配置,形成可追溯的自动化流水线。