在传统 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 后台安装:

  1. 进入:Dashboard → 系统管理 → 插件管理 → 可用插件
  2. 搜索并安装:
    • 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 连接

  1. 进入:系统管理 → 系统配置
  2. 找到 Publish Over SSH 配置项:
    • SSH Server 名称:自定义(如 PHP-Server)
    • Hostname:服务器内网 IP / 公网 IP
    • Username:服务器登录用户名(如 root)
    • Remote Directory:PHP 项目部署根目录(如 /www/wwwroot/
  3. 点击 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 项目,我们实现了:

  1. 代码提交自动部署,告别手动上传
  2. 统一部署环境,避免线上本地不一致
  3. 一键回滚 / 重新部署,运维效率提升 90%
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐