Jenkins自动化部署Tomcat+PHP项目学习笔记

一、实验概述

1.1 实验目的

实现Jenkins + Git + Tomcat + PHP全自动CI/CD流水线:

  1. 开发将PHP代码提交至Git仓库

  2. Jenkins自动拉取源码

  3. 自动清理Tomcat旧项目、发布新代码

  4. 自动重启Tomcat服务,实现代码一键上线

1.2 服务器环境规划(单节点实验,一台服务器全部搞定)

  • 操作系统:CentOS 7 / Rocky Linux 9

  • 服务部署:Jenkins、Git、Tomcat、PHP 全部部署在同一台服务器

  • IP地址:192.168.10.100

  • 端口说明:Jenkins:8080 Tomcat:8081

1.3 整体工作流程

开发提交PHP代码到Git → Webhook触发Jenkins构建 → Jenkins拉取代码 → 清空Tomcat站点目录 → 拷贝新代码到Tomcat → 重启Tomcat → 访问页面验证


二、前置环境搭建(Tomcat+PHP运行环境)

2.1 安装JDK(Tomcat依赖)

yum install -y java-1.8.0-openjdk-devel
java -version

2.2 安装Tomcat8

# 下载解压Tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.90/bin/apache-tomcat-8.5.90.tar.gz
tar xf apache-tomcat-8.5.90.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-8.5.90 /usr/local/tomcat

# 修改Tomcat端口,避免和Jenkins8080冲突
vim /usr/local/tomcat/conf/server.xml
# 修改端口:Connector port="8081"

# 启动Tomcat并设置开机自启
/usr/local/tomcat/bin/startup.sh
ss -antlp | grep 8081

2.3 整合PHP环境到Tomcat

Tomcat默认不支持解析PHP代码,需要安装php、php-fpm,配置Tomcat调用PHP解析引擎

# 安装PHP环境
yum install -y php php-fpm

# 启动php-fpm
systemctl start php-fpm
systemctl enable php-fpm

# 修改Tomcat配置,支持解析PHP文件
vim /usr/local/tomcat/conf/context.xml
# 文件末尾添加一行:
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/test"
username="root" password="123456" maxTotal="100" maxIdle="30" maxWaitMillis="10000"/>

# 重启Tomcat生效
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

2.4 本地Git仓库准备

# 安装git
yum install -y git

# 创建本地git仓库(实验使用本地Git,无需外网Gitee/GitHub)
mkdir -p /data/git/php-project
cd /data/git/php-project
git init

# 编写测试php页面
echo "<?php phpinfo(); ?>" > index.php
git add .
git commit -m "init php project"


三、Jenkins服务安装与初始化

3.1 安装Jenkins

# 导入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

# 【关键】修改Jenkins运行用户为root,避免发布权限不足
sed -i 's/JENKINS_USER="jenkins"/JENKINS_USER="root"/g' /etc/sysconfig/jenkins

# 启动服务
systemctl start jenkins
systemctl enable jenkins

3.2 Jenkins页面初始化

  1. 访问地址:http://192.168.10.100:8080

  2. 查看初始密码:cat /var/lib/jenkins/secrets/initialAdminPassword

  3. 安装推荐插件 → 创建管理员账号 → 进入Jenkins首页

3.3 安装必备插件

系统管理 → 插件管理 → 可选插件,搜索安装:

  • Git Plugin:拉取Git代码

  • Publish over SSH:远程发布(本机也可用)

  • Generic Webhook Trigger:Git钩子自动触发构建


四、Jenkins自由风格项目配置(核心步骤)

4.1 新建项目

  1. 新建Item → 输入项目名:tomcat-php-deploy

  2. 选择【自由风格项目】→ 确定

4.2 源码管理配置

  1. 勾选【Git】

  2. 仓库地址:file:///data/git/php-project (本地Git仓库地址)

  3. 分支构建:*/main

4.3 构建触发器(自动发布核心)

勾选:Generic Webhook Trigger,后续配置Git钩子实现代码提交自动构建

4.4 构建环节:执行Shell脚本(一键发布脚本)

下拉选择【Execute shell】,粘贴以下完整发布脚本,直接复制即用

# 1. 进入Jenkins工作空间
cd $WORKSPACE

# 2. 清空Tomcat默认站点旧代码
rm -rf /usr/local/tomcat/webapps/ROOT/*

# 3. 将Jenkins拉取的最新PHP代码拷贝到Tomcat站点目录
cp -rf ./* /usr/local/tomcat/webapps/ROOT/

# 4. 重启Tomcat服务
/usr/local/tomcat/bin/shutdown.sh
sleep 3
/usr/local/tomcat/bin/startup.sh

echo "=====PHP项目自动化发布完成====="

4.5 手动构建测试

  1. 点击【立即构建】

  2. 查看控制台输出,无报错即为发布成功

  3. 访问测试:http://192.168.10.100:8081,看到phpinfo页面代表部署成功


五、配置Git钩子,实现代码提交自动发布

5.1 获取Jenkins触发地址

Jenkins项目页面 → 构建触发器 → 复制Webhook地址:

http://192.168.10.100:8080/generic-webhook-trigger/invoke?token=tomcat-php

5.2 本地Git仓库配置钩子脚本

cd /data/git/php-project/.git/hooks
vim post-receive

写入内容:

#!/bin/bash
curl http://192.168.10.100:8080/generic-webhook-trigger/invoke?token=tomcat-php

# 添加执行权限
chmod +x post-receive

5.3 全自动验证

  1. 修改本地PHP代码:echo "<h1>Jenkins自动发布成功</h1><?php phpinfo(); ?>" > index.php

  2. 提交代码:git add . &amp;&amp; git commit -m "update index page"

  3. 自动触发Jenkins构建,无需人工点击

  4. 刷新网页,页面内容自动更新


六、常见报错及解决方案(实验必看)

报错现象 原因 解决办法
Jenkins拷贝文件权限不足 Jenkins默认运行用户为jenkins,无tomcat目录权限 修改配置将Jenkins运行用户改为root,重启服务
Tomcat无法重启,端口占用 Tomcat关闭脚本失效,进程残留 kill -9 $(ps -ef
Git提交后不自动构建 钩子脚本无执行权限、Jenkins地址写错 给post-receive添加执行权限,核对JenkinsIP和token
页面访问无法解析PHP php-fpm未启动、tomcat配置未生效 重启php-fpm和tomcat,检查context.xml配置

七、实验总结

  1. 本次实验实现Jenkins一键自动发布PHP项目至Tomcat,全程无人为干预

  2. 核心流程:代码提交→Git钩子触发→Jenkins拉取代码→清空旧项目→发布新代码→重启Tomcat

  3. 生产优化点:生产环境建议拆分Jenkins节点和Tomcat服务器,使用SSH远程发布,不要本地同机部署

  4. 核心痛点:一定要修改Jenkins运行用户为root,否则目录权限不足导致发布失败

更多推荐