• Jenkins实用发布与回滚PHP项目生产实践


    1、概述

    关于jenkins和gitlab的部署,不多加赘述,网上的部署文档多了去了,不踩坑,不成长!这里只聊聊生产的一些实践实用。在关于php项目的运行,我们知道对比于java项目,少了很多繁琐的步骤,至少不需要编译,不需要生产war包。但实践上关于php项目jenkins的自动化发布的文档也相对较少。那么这里就聊聊php项目的发布和回滚是怎么处理的。

    这里有2种方式,一种是直接拉取gitlab上的代码,直接同步到目标主机的站点根目录中,为了安全起见,是需要使用--exclude参数来排除.git目录,以及一些关于git的敏感目录进行排除,具体实践,就看公司的程序猿怎么说了。还有另外一种方式,也差不多一样的原理,但其中就多了一步,对拉取后的代码同步到目标主机的代码版本目录当中,网站根目录通过软链接的方式实现站点的根路径定义,这样做的好处是如果需要回退到前期的某个版本,可以直接重新定义软链接即可实现快速回滚。这里需要演示的就是第二种方案,如有更好的生产实践方案,也欢迎各位大佬讨论交流。

    2、项目实践

    2.1、环境说明

    主机说明 IP地址
    Jenkins发布主机 192.168.0.143
    目标服务器主机 192.168.0.128

    2.2、Jenkins配置

    2.2.1、修改Jenkins的运行用户

    这里需要注意的是:jenkins安装后默认用户是jenkins用户运行,修改运行用户,需要将其相关的运行目录的所属进行修改,否则jenkins是没法运行起来的。至于为什么改成另外一个用户,只是为了拉取代码的所属者和目标主机的php和nginx的运行用户保持一致性。

    [root@jenkins ~]# useradd dengcom
    [root@jenkins ~]# vim /etc/sysconfig/jenkins
    JENKINS_USER="dengcom"
    [root@jenkins ~]# chown -R dengcom.dengcom /var/lib/jenkins  /usr/lib/jenkins /var/log/jenkins /var/cache/jenkins
    [root@jenkins ~]# /etc/init.d/jenkins restart
    [root@jenkins ~]# netstat -tulnp |grep 8080
    

    2.2.2、配置Jenkins用户和Gitlab的ssh-key

    [root@jenkins ~]# su - dengcom
    [dengcom@jenkins ~]$ ssh-keygen
    [dengcom@jenkins ~]$ cat .ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAJvWCAvokpvEx2ohibA7rp+qRdEGO9z03Dj3GlNMRBeBMN3mPBBMUBo8XsJF2gXiPQrdIk0kPZqphnKb9y081AEDhQnliY71pmJxgkfDIWEQiUqJUPwM+tcTuibJH2OYYy0f9Bs5leDHgfXi7ZEurSLI1YCYjgOGPef+yhACMkvPwSIFIsRuyRcsdFrhTt2LXnmbR49KdpOzndUiH+CPgjjOn+qvJxzr8v0bpEArt40y6U4sWqv8hLZPVaArGkBwvpo2o+fZJcDioalxOb377Su4I505e+wv/9rWjanmV5vfo41fcOrpTN89liS1C4CrZvuwBPJuQaQzoC3gcrYCp dengcom@node01.hao123.com
    
    [dengcom@jenkins ~]$ git clone git@192.168.0.130:root/wap-dev.git  #测试是否可以正常拉取代码
    

    在gitlab上的右上角-->用户设置-->SSH密钥设置,添加上面生成的公钥,添加完成后在Jenkins主机上进行测试是否可以正常拉取代码。

    2.2.3、Jenkins的凭据配置

    添加全局凭据设置,为了一会儿可以正常通过jenkins的web操作进行拉取代码,这里添加上面生成的秘钥。

    Jenkins-->管理Jenkins-->凭据-->系统-->全局凭据-->添加凭据

    2.2.4、目标主机的一些设置

    创建nginx和php的用户,并在jenkins主机上添加ssh-key信任,站点根目录和代码版本目录创建

    [root@node01 ~]# useradd dengcom
    [root@node01 ~]# mkdir /data/web/wap-dev -pv
    [root@node01 ~]# mkdir /data/code/version -pv
    [dengcom@jenkins ~]$ ssh-copy-id dengcom@192.168.0.128
    

    2.2.5、新建一个自由风格的任务进行如下配置

    任务名称保持和目标网站根目录一致,这样可以节省很多麻烦。首先进行参数设置,如下:

    源码管理,进行添加项目的git地址和凭据,这里添加变量${git}是为了按照前面的参数进行匹配

    最后再配置需要执行的shell,就完成了

    #!/bin/bash
    
    #自定义全局变量
    
    VERSION_ROOT=/data/code/version
    
    WWW_ROOT=/data/web/wap-dev
    
    NODE_LIST="192.168.0.128"
    
    CTIME=$(date "+%Y-%m-%d")
    
    #判断是否正确输入需要发布的版本
    
    if [ -z "${git}" ];then
    
        echo -e "发布的版本号为空,请重新输入版本号后构建......"
        
        exit 1
    
    else
    
    #判断为发布操作时,执行以下代码块
    
        if [ ${status} == "Deploy" ];then
            
    #对节点列表进行发布代码
    
            for node in $NODE_LIST
            do
            
            	# 使用rsync的方式将workspace的代码进行同步到目标主机,并进行软链接到站点根目录
                
                rsync -raz --delete --progress --exclude=cache --exclude=.git --exclude=.idea ${WORKSPACE}/ dengcom@$node:${VERSION_ROOT}/${git}/
            
                ssh dengcom@$node "rm -rf ${WWW_ROOT}"
            
                ssh dengcom@$node "ln -sv ${VERSION_ROOT}/${git} ${WWW_ROOT}"
              
                echo "发布成功......"
            done
        fi
    
    
    #判断为回滚操作时,执行以下代码块
    
        if [ ${status} == "Rollback" ];then
        
            echo "准备回退......"
            
    
    #对节点列表进行回退版本
    
            for node in $NODE_LIST;do
            
                #判断目标主机是否存在回滚的版本
                
                ssh dengcom@$node "ls -ld ${VERSION_ROOT}/${git}"
                
                res=$(echo $?)
                
                if [ $res == 0 ];then
                    
                    ssh dengcom@$node "rm -rf ${WWW_ROOT}"
            
                    ssh dengcom@$node "ln -sv ${VERSION_ROOT}/${git} ${WWW_ROOT}"
                
                else
                
                    echo "回退版本:"${git}"不存在"
                    
                    exit 2
                    
                fi
                
            done
            
            echo "已成功回退到"${git}"版本......"    
    

    3、项目演示

    3.1、发布操作

    点击-->Build with Parameters,选择配置的选项参数,并填写版本号-->开始构建


    在目标主机上查看代码结构的变化:

    [root@node02 code]# ll /data/web/wap-dev
    lrwxrwxrwx 1 dengcom dengcom 59 Nov 30 16:09 /data/web/wap-dev -> /data/code/version/22e42950c47dccfc0f940f1eaa838749463c84da
    [root@node02 code]# ll /data/code/version/
    total 0
    drwxr-xr-x 4 dengcom dengcom 62 Nov 30 16:09 22e42950c47dccfc0f940f1eaa838749463c84da
    drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:38 603582c48c7976eb4da6294185f193898689e7a1
    drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:42 fdb77979a186600f4ff39c442a958d00f80af810
    

    3.2、回滚操作

    在上面可以看到有多个版本号的代码,随意选择一个版本,进行操作。点击-->Build with Parameters,选择配置的选项参数,并填写版本号-->开始构建


    目标主机上查看是否已经回滚:

    [root@node02 code]# ll /data/web/wap-dev
    lrwxrwxrwx 1 dengcom dengcom 59 Nov 30 16:12 /data/web/wap-dev -> /data/code/version/603582c48c7976eb4da6294185f193898689e7a1
    [root@node02 code]# ll /data/code/version/
    total 0
    drwxr-xr-x 4 dengcom dengcom 62 Nov 30 16:09 22e42950c47dccfc0f940f1eaa838749463c84da
    drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:38 603582c48c7976eb4da6294185f193898689e7a1
    drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:42 fdb77979a186600f4ff39c442a958d00f80af810
    

    简单的php项目发布和回滚就做好了!!!

  • 相关阅读:
    Webdriver启动Firefox浏览器后,页面显示空白
    Windows+Python+Selenium基础篇之1-环境搭建
    office2010无法卸载问题
    .NET使用FastDBF读写DBF
    并发编程相关概念
    C#的多线程简洁笔记
    asp.net core 3.1 入口:Program.cs中的Main函数
    【WPF学习】第四十四章 图画
    .NET知识梳理——1.泛型Generic
    C#个推SDK推送安卓+iOS
  • 原文地址:https://www.cnblogs.com/linuxk/p/11962892.html
Copyright © 2020-2023  润新知