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項目發布和回滾就做好了!!!