在传统 PHP 项目开发中,每次更新代码都需要手动上传文件、重启服务、配置环境,不仅效率低,还容易出现人为失误。Jenkins 自动化部署可以完美解决这个问题:代码提交后自动拉取、构建、部署,全程零人工干预,一键上线项目。
本篇教程从 0 到 1,带你搭建 Jenkins + PHP 项目的自动化部署流程,适用于 Laravel、ThinkPHP、原生 PHP 等所有 PHP 项目。
一、前置准备
1. 环境要求
- 一台 Linux 服务器(CentOS 7+/Ubuntu 20+ 均可)
- 已安装 PHP、Nginx、Git(PHP 项目运行环境)
- 服务器开放 8080 端口(Jenkins 默认端口)
- 一个代码仓库(Gitee/GitHub/GitLab 都支持)
2. 核心流程
本教程最终实现的自动化流程:
plaintext
本地提交代码 → 代码仓库 → Jenkins 自动触发拉取 → 自动部署到服务器 Nginx 目录 → 完成上线
二、安装并初始化 Jenkins
1. 安装 Jenkins
Jenkins 依赖 Java 环境,先安装 JDK:
bash
运行
# 安装 OpenJDK 11
yum install -y java-11-openjdk-devel # CentOS
# apt install -y openjdk-11-jdk # Ubuntu
添加 Jenkins 源并安装:
bash
运行
# 导入 Jenkins 密钥
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 安装 Jenkins
yum install -y jenkins
2. 启动 Jenkins
bash
运行
# 设置开机自启
systemctl enable jenkins
# 启动服务
systemctl start jenkins
# 查看状态
systemctl status jenkins
3. 初始化 Jenkins
浏览器访问:http://服务器IP:8080,首次打开需要输入管理员密码。
获取密码命令:
bash
运行
cat /var/lib/jenkins/secrets/initialAdminPassword
- 选择安装推荐的插件(等待自动安装完成)
- 创建管理员账号(记住账号密码,后续登录使用)
- 完成初始化,进入 Jenkins 控制台
三、Jenkins 必备插件安装
部署 PHP 项目需要 2 个核心插件,在 Jenkins 后台安装:
- 进入:Dashboard → 系统管理 → 插件管理 → 可用插件
- 搜索并安装:
- Git Plugin(拉取代码,默认已装)
- Publish Over SSH(远程发送文件到部署目录)
安装完成后重启 Jenkins:
bash
运行
systemctl restart jenkins
四、配置 Jenkins 服务器免密登录(关键)
Jenkins 需要免密权限将代码部署到 PHP 项目目录,我们配置 SSH 免密登录。
1. 生成 Jenkins 密钥
bash
运行
# 切换到 jenkins 用户
su - jenkins -s /bin/bash
# 生成密钥(一路回车,不要设置密码)
ssh-keygen -t rsa
2. 查看公钥
bash
运行
cat ~/.ssh/id_rsa.pub
3. 将公钥添加到服务器授权
bash
运行
# 将公钥写入 authorized_keys,实现免密
echo "上面复制的公钥内容" >> ~/.ssh/authorized_keys
# 设置权限(必须,否则免密失效)
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
五、配置 Jenkins 远程 SSH 连接
- 进入:系统管理 → 系统配置
- 找到 Publish Over SSH 配置项:
- SSH Server 名称:自定义(如 PHP-Server)
- Hostname:服务器内网 IP / 公网 IP
- Username:服务器登录用户名(如 root)
- Remote Directory :PHP 项目部署根目录(如
/www/wwwroot/)
- 点击 Test Configuration ,显示
Success即配置成功。
六、创建 PHP 项目自动化部署任务
1. 新建任务
- 进入 Jenkins 控制台 → 新建任务
- 任务名称:
PHP-Deploy - 选择:构建一个自由风格的软件项目 → 确定
2. 配置代码仓库
在 源码管理 中选择 Git:
- Repository URL :你的 PHP 项目 Git 地址(如
https://gitee.com/xxx/php-project.git) - Credentials:添加仓库账号密码(Gitee/GitHub 账号)
- 分支 :默认
*/main或*/master
3. 配置构建触发器(自动部署)
勾选 GitHub hook trigger for GITScm polling(代码提交自动触发部署)。
如果是 Gitee/GitLab,配置仓库 WebHook:
- Jenkins 地址:
http://IP:8080/generic-webhook-trigger/invoke - 触发条件:
Push 事件
4. 配置构建脚本(核心部署命令)
在 构建 → 执行 Shell 中输入以下脚本(根据你的项目修改):
bash
运行
# 1. 进入 Jenkins 工作区(拉取代码的目录)
cd ${WORKSPACE}
# 2. 同步代码到项目部署目录(/www/wwwroot/你的项目目录)
rsync -avz --delete --exclude=.git ./ /www/wwwroot/php-project/
# 3. PHP 项目专属命令(根据框架选择)
# ThinkPHP 5/6
cd /www/wwwroot/php-project && chmod -R 755 runtime && chmod -R 755 public
# Laravel
# cd /www/wwwroot/php-project && chmod -R 755 storage && chmod -R 755 bootstrap/cache
# 原生 PHP 无需额外命令
# 4. 设置目录权限(防止 Nginx 无权限访问)
chown -R www:www /www/wwwroot/php-project
5. 保存配置
至此,自动化部署任务配置完成!
七、测试自动化部署
1. 手动触发部署
- 进入任务 → 立即构建
- 查看控制台输出:
Finished: SUCCESS表示部署成功。
2. 自动触发部署
- 本地修改 PHP 代码
- 提交并推送到 Git 仓库
- Jenkins 会自动拉取代码并部署,无需任何操作。
八、常见问题解决
1. Jenkins 无权限写入项目目录
bash
运行
chown -R jenkins:jenkins /www/wwwroot/
chmod -R 755 /www/wwwroot/
2. 构建成功但网页不更新
- 检查 Nginx 配置的根目录是否正确
- 清除浏览器缓存 / 重启 Nginx:
systemctl restart nginx
3. Git 拉取代码失败
- 检查仓库地址是否正确
- 确认账号密码权限无误
九、总结
通过 Jenkins 部署 PHP 项目,我们实现了:
- 代码提交自动部署,告别手动上传
- 统一部署环境,避免线上本地不一致
- 一键回滚 / 重新部署,运维效率提升 90%