Jenkins 自动化部署 PHP 项目

1. 准备实验环境

搭建包含 Git 仓库主机、Jenkins 主机和 Web 主机的环境。

2. 准备 Git 仓库

  • 在 Git 主机上创建 git 用户并设置密码:

    [root@git ~]# useradd git
    [root@git ~]# echo "123" | passwd --stdin git

  • 切换到 git 用户,创建并初始化裸仓库:

    [root@git ~]# su - git
    [git@git ~] mkdir php.git [git@git ~] cd php.git
    [git@git php.git] git --bare init [git@git php.git] exit

3. 上传代码到仓库

  • 克隆仓库到本地:

    [root@git ~]# git clone git@192.168.166.9:/home/git/php.git

  • 创建 PHP 测试文件并提交推送:

    [root@git ~]# cd php/
    [root@git php]# cat << EOF > index.php

    <?php phpinfo(); ?>

    EOF
    [root@git php]# git add .
    [root@git php]# git commit -m "all"
    [root@git php]# git push origin master

4. 部署 Web 主机环境

nginx

  • 安装相关软件:

    yum install -y nginx php php-mysqlnd mysql-server php-fpm

  • 配置 nginx.conf 文件,添加 PHP 解析相关配置:

    cd /etc/nginx/
    mv nginx.conf nginx.conf.back
    cp nginx.conf.default nginx.conf
    vim nginx.conf
    http {
    ...
    include conf.d/*.conf;
    ...
    server {
    ...
    location ~ .php { fastcgi_split_path_info ^(.+\.php)(/.+);
    root html;
    fastcgi_pass php-fpm;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
    ...
    }
    }

  • 启动服务:

    systemctl start php-fpm mysqld nginx

5. Jenkins 主机配置密钥认证

  • 切换到 jenkins 用户,生成密钥并分发到 Web 主机和 Git 仓库主机:

    [root@jenkins ~]# su -s /bin/bash jenkins
    bash-4.2 ssh-keygen bash-4.2 ssh-copy-id root@192.168.158.5
    bash-4.2$ ssh-copy-id git@192.168.158.4

6. 基于 rsync 部署

  1. 在 Jenkins 中创建一个 Freestyle project。
  2. 进行相关配置(具体配置参考相关图示)。
  3. 点击 "build Now" 执行部署。

7. 基于 ansible 部署

  • 在 Jenkins 主机上安装 ansible:

    [root@jenkins ~]# rpm -ivh epel-release-latest-7.noarch.rpm
    [root@jenkins ~]# yum -y install ansible

  • 配置 ansible 主机清单:

    [root@jenkins ~]# vim /etc/ansible/hosts
    [webserver]
    192.168.166.6

  • 修改 Jenkins 运行用户:

    [root@jenkins ~]# vim /usr/lib/systemd/system/jenkins.service
    User=root
    Group=root
    [root@jenkins ~]# systemctl daemon-reload
    [root@jenkins ~]# systemctl restart jenkins

  • 设置 SSH 免密登录:

    [root@jenkins ~]# ssh-keygen -N '' -f ~/.ssh/id_rsa
    [root@jenkins ~]# ssh-copy-id root@192.168.158.5
    [root@jenkins ~]# ssh-copy-id git@192.168.158.4

  1. 在 Jenkins 中添加 Ansible 插件。

  2. 配置 Web 主机的 nginx.conf 文件,设置网站根目录等信息并重启 nginx:

    [root@web ~]# cat /etc/nginx/nginx.conf
    server {
    listen 80;
    listen [::]:80;
    server_name _;
    root /usr/share/nginx/html/php-ansible;
    index index.html index.php;

    复制代码
         include /etc/nginx/default.d/*.conf; 
       	.....

    [root@web ~]# systemctl restart nginx

8. 使用 pipeline 部署

  • 创建 Pipeline 项目,编写 Pipeline 脚本:

    pipeline {
    agent any
    stages {
    stage('Checkout Code') {
    steps {
    // 使用 SSH 方式拉取 Git 代码
    git branch: 'master', // 替换为你的分支名称
    url: 'git@192.168.158.4:/home/git/discuz.git' // 替换为你的 Git 仓库地址
    }
    }

    复制代码
          stage('Deploy to Server') {
              steps {
                  sh 'scp -r ** root@192.168.158.5:/usr/share/nginx/html/ ;'
              }
          }
      }
    
      post {
          success {
              echo 'Deployment successful!'
          }
          failure {
              echo 'Deployment failed!'
          }
      }

    }

  • 执行部署。

9. Discuz 论坛部署

1. Git 主机准备 Discuz 代码
  1. 克隆 Discuz 代码到本地(以官方仓库为例,或上传本地 Discuz 源码):

    复制代码
    [root@git ~]# cd /home/git/
    [root@git git]# git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git discuz
    [root@git git]# cd discuz
  2. 初始化并推送到私有 Git 仓库

    复制代码
    [root@git discuz]# git init
    [root@git discuz]# git add .
    [root@git discuz]# git commit -m "initial discuz code"
    [root@git discuz]# git remote add origin git@192.168.166.9:/home/git/discuz.git  # 关联私有仓库
    [root@git discuz]# git push -u origin master  # 推送代码
2. Web 主机环境配置
  1. 创建网站根目录并授权(以 Nginx 为例):

    复制代码
    [root@web ~]# mkdir -p /usr/share/nginx/html/discuz
    [root@web ~]# chown -R nginx:nginx /usr/share/nginx/html/discuz  # 确保 Web 服务有权限访问
  2. 配置数据库(创建 Discuz 专用数据库和用户):

    复制代码
    [root@web ~]# mysql -u root -p
    Enter password:  # 输入数据库密码
    
    mysql> CREATE DATABASE discuz_db CHARACTER SET utf8mb4;  # 创建数据库
    mysql> CREATE USER 'discuz_user'@'localhost' IDENTIFIED BY '123456';  # 创建用户
    mysql> GRANT ALL PRIVILEGES ON discuz_db.* TO 'discuz_user'@'localhost';  # 授权
    mysql> FLUSH PRIVILEGES;
    mysql> exit
  3. 调整 PHP 配置(确保满足 Discuz 需求):

    复制代码
    [root@web ~]# vim /etc/php.ini
    # 修改以下参数(根据实际环境调整)
    upload_max_filesize = 20M
    post_max_size = 20M
    max_execution_time = 300
    
    [root@web ~]# systemctl restart php-fpm  # 重启 PHP 服务
3. Jenkins 部署配置(基于 Pipeline)
  1. 修改 Pipeline 脚本(适配 Discuz 部署):

    复制代码
    pipeline {
        agent any
        stages {
            stage('Checkout Code') {
                steps {
                    // 拉取 Discuz 代码
                    git branch: 'master',
                       url: 'git@192.168.158.4:/home/git/discuz.git'  # 私有仓库地址
                }
            }
            
            stage('Deploy to Web Server') {
                steps {
                    // 同步代码到 Web 主机目录
                    sh 'scp -r ./* root@192.168.158.5:/usr/share/nginx/html/discuz/'
                    
                    // 远程授权(确保文件权限正确)
                    sh 'ssh root@192.168.158.5 "chown -R nginx:nginx /usr/share/nginx/html/discuz"'
                }
            }
        }
        
        post {
            success {
                echo 'Discuz deployment successful! Please complete installation via browser.'
            }
            failure {
                echo 'Discuz deployment failed!'
            }
        }
    }
  2. 执行部署:在 Jenkins 中运行 Pipeline 项目,等待代码同步完成。

4. 浏览器完成 Discuz 安装
  1. 访问 Web 主机地址(如 http://192.168.158.5/discuz),进入 Discuz 安装向导。
  2. 按照提示完成以下步骤:
    • 同意许可协议,点击 "下一步"。
    • 检查环境(确保所有项均为 "符合"),点击 "下一步"。
    • 选择 "全新安装",输入数据库信息:
      • 数据库名:discuz_db
      • 数据库用户:discuz_user
      • 数据库密码:123456
    • 设置管理员账号和密码,完成安装。
5. 验证部署
  1. 安装完成后,访问论坛首页确认正常显示。
  2. 登录管理员账号,检查功能是否正常(如发帖、上传附件等)。
  3. 后续代码更新可直接提交到 Git 仓库,Jenkins 会自动触发部署(需配置 Git 钩子或定时构建)。
相关推荐
杀手不太冷!2 小时前
Jenkins的安装与使用;git clone url的时候,url为http和ssh时候的区别
git·http·jenkins
原神启动12 小时前
Ansible(三)—— 使用Ansible自动化部署LNMP环境
android·自动化·ansible
flying robot2 小时前
ELK单节点集群配置
运维·elk·jenkins
沈健_算法小生2 小时前
Ubutun22.04离线部署Jenkins最新版
运维·jenkins
野生技术架构师2 小时前
SpringBoot+Elasticsearch实现高效全文搜索
spring boot·elasticsearch·jenkins
守城小轩2 小时前
基于Chrome140的Quora账号自动化(关键词浏览)——脚本撰写(二)
运维·自动化·chrome devtools·浏览器自动化·浏览器开发
weixin_307779132 小时前
Jenkins Pipeline: Input Step插件详解与实践指南
运维·开发语言·自动化·jenkins·etl
小兜全糖(xdqt)2 小时前
.net 8 添加swagger以及批量index,批量删除 elasticsearch
elasticsearch·jenkins·.net
Bruce_Liuxiaowei2 小时前
Python 跨平台 Nmap 自动化扫描工具:从手动到一键批量扫描
开发语言·python·网络安全·自动化