Jenkins自动化部署PHP项目

在传统 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%
相关推荐
4SAPI4 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
FII工业富联科技服务4 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
Rock Chin6975 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
发量惊人的中年网工7 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
海宇数据7 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
虎鲸不是鱼8 小时前
【虎鲸进化论 30】安全护栏:人类闸门、审计与爆炸半径
人工智能·自动化·大模型·llm·自进化agent
益莱储中国9 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
吹什么轩10 小时前
linux系统复习:僵尸进程与孤儿进程
linux·运维·php
专注仿真10 小时前
ThinkPHP6 API接口开发实例:从零搭建RESTful风格接口
后端·php·restful
大文说跨境10 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化