Jenkins實用發佈與回滾PHP項目生產實踐

[toc]php

一、概述

關於jenkins和gitlab的部署,很少加贅述,網上的部署文檔多了去了,不踩坑,不成長!這裏只聊聊生產的一些實踐實用。在關於php項目的運行,咱們知道對比於java項目,少了不少繁瑣的步驟,至少不須要編譯,不須要生產war包。但實踐上關於php項目jenkins的自動化發佈的文檔也相對較少。那麼這裏就聊聊php項目的發佈和回滾是怎麼處理的。java

這裏有2種方式,一種是直接拉取gitlab上的代碼,直接同步到目標主機的站點根目錄中,爲了安全起見,是須要使用--exclude參數來排除.git目錄,以及一些關於git的敏感目錄進行排除,具體實踐,就看公司的程序猿怎麼說了。還有另一種方式,也差很少同樣的原理,但其中就多了一步,對拉取後的代碼同步到目標主機的代碼版本目錄當中,網站根目錄經過軟連接的方式實現站點的根路徑定義,這樣作的好處是若是須要回退到前期的某個版本,能夠直接從新定義軟連接便可實現快速回滾。這裏須要演示的就是第二種方案,若有更好的生產實踐方案,也歡迎各位大佬討論交流。node

二、項目實踐

2.一、環境說明

主機說明 IP地址
Jenkins發佈主機 192.168.0.143
目標服務器主機 192.168.0.128

2.二、Jenkins配置

2.2.一、修改Jenkins的運行用戶

這裏須要注意的是:jenkins安裝後默認用戶是jenkins用戶運行,修改運行用戶,須要將其相關的運行目錄的所屬進行修改,不然jenkins是無法運行起來的。至於爲何改爲另一個用戶,只是爲了拉取代碼的所屬者和目標主機的php和nginx的運行用戶保持一致性。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.二、配置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主機上進行測試是否能夠正常拉取代碼。 git

2.2.三、Jenkins的憑據配置

添加全局憑據設置,爲了一下子能夠正常經過jenkins的web操做進行拉取代碼,這裏添加上面生成的祕鑰。web

Jenkins-->管理Jenkins-->憑據-->系統-->全局憑據-->添加憑據shell

2.2.四、目標主機的一些設置

建立nginx和php的用戶,並在jenkins主機上添加ssh-key信任,站點根目錄和代碼版本目錄建立vim

[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.五、新建一個自由風格的任務進行以下配置

任務名稱保持和目標網站根目錄一致,這樣能夠節省不少麻煩。首先進行參數設置,以下:安全

源碼管理,進行添加項目的git地址和憑據,這裏添加變量${git}是爲了按照前面的參數進行匹配bash

最後再配置須要執行的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.一、發佈操做

點擊-->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.二、回滾操做

在上面能夠看到有多個版本號的代碼,隨意選擇一個版本,進行操做。點擊-->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項目發佈和回滾就作好了!!!

相關文章
相關標籤/搜索