欢迎来到PHP项目CI/CD实战讲座!
大家好!欢迎来到今天的“PHP项目CI/CD实战”讲座。如果你还在手动部署代码、熬夜排查问题,那么恭喜你找到了正确的教室!今天我们将一起探讨如何在PHP项目中实施持续集成(CI)和持续部署(CD),让我们的开发流程更加高效、自动化且优雅。
第一章:什么是CI/CD?为什么我们需要它?
想象一下,你正在做一个PHP项目,每次提交代码后都需要手动运行测试、打包文件、上传到服务器,最后祈祷一切正常。听起来是不是很麻烦?更糟糕的是,如果有bug怎么办?重新来一遍?这简直是一场噩梦!
持续集成(CI) 和 持续部署(CD) 就是为了解决这些问题而生的:
- CI:自动运行测试,确保新代码不会破坏现有功能。
- CD:自动将通过测试的代码部署到生产环境。
简单来说,CI/CD就是让你从繁琐的手动操作中解脱出来,把时间花在更有意义的事情上,比如喝咖啡或者追剧。
第二章:搭建CI/CD的基础工具
在PHP项目中实现CI/CD,我们需要一些关键工具。以下是常见的选择:
工具 | 作用 |
---|---|
Git | 版本控制系统,管理代码变更 |
GitHub Actions / GitLab CI | 自动化构建和部署 |
Composer | PHP依赖管理工具 |
PHPUnit | 测试框架 |
1. 使用Git进行版本控制
首先,你需要将项目托管到Git仓库(如GitHub或GitLab)。这是CI/CD的基础。
# 初始化Git仓库
git init
# 添加所有文件到仓库
git add .
# 提交代码
git commit -m "Initial commit"
# 推送到远程仓库
git remote add origin <repository-url>
git push -u origin main
2. 配置Composer
Composer是PHP的依赖管理工具,确保你的项目依赖能够自动安装。
创建一个composer.json
文件:
{
"require": {
"php": "^7.4 || ^8.0",
"ext-json": "*",
"monolog/monolog": "^2.0"
},
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
运行以下命令安装依赖:
composer install
第三章:编写自动化测试
没有测试的CI/CD就像没有安全带的过山车——刺激但危险。让我们用PHPUnit来编写单元测试。
1. 安装PHPUnit
composer require --dev phpunit/phpunit ^9
2. 编写测试用例
假设我们有一个简单的PHP类Calculator.php
:
<?php
namespace App;
class Calculator
{
public function add($a, $b)
{
return $a + $b;
}
}
对应的测试文件tests/CalculatorTest.php
:
<?php
use PHPUnitFrameworkTestCase;
use AppCalculator;
class CalculatorTest extends TestCase
{
public function testAdd()
{
$calculator = new Calculator();
$result = $calculator->add(2, 3);
$this->assertEquals(5, $result);
}
}
运行测试:
vendor/bin/phpunit
如果测试通过,你会看到类似以下输出:
OK (1 test, 1 assertion)
第四章:配置CI/CD流水线
接下来,我们将使用GitHub Actions来配置CI/CD流水线。
1. 创建.github/workflows/ci.yml
在项目根目录下创建.github/workflows/ci.yml
文件:
name: PHP CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.0'
extensions: mbstring, json
tools: composer:v2
- name: Install dependencies
run: composer install --no-progress --no-suggest
- name: Run tests
run: vendor/bin/phpunit
2. 部署到生产环境
为了实现CD,我们需要添加一个部署步骤。假设我们使用SSH连接到服务器,可以通过以下方式配置:
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy to server
run: |
scp -r ./* user@your-server:/var/www/html
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
注意:你需要在GitHub Secrets中添加SSH_PRIVATE_KEY
,这是你的SSH密钥。
第五章:常见问题与解决方案
问题1:测试失败怎么办?
解决方法:检查测试用例是否覆盖了所有场景,并确保本地环境与CI环境一致。
问题2:部署失败怎么办?
解决方法:确认SSH密钥是否正确,以及目标服务器是否有足够的权限。
结语
恭喜你完成了今天的课程!现在你应该对如何在PHP项目中实施CI/CD有了基本的了解。记住,CI/CD不仅是一种技术,更是一种文化。它鼓励团队频繁交付高质量代码,减少人为错误。
最后,引用Martin Fowler的一句话:“The best way to get reliable software is to run it frequently.”(获得可靠软件的最佳方式是频繁运行它。)
希望今天的讲座对你有所帮助!如果有任何疑问,请随时提问。下次见!