[toc]php
關於jenkins和gitlab的部署,很少加贅述,網上的部署文檔多了去了,不踩坑,不成長!這裏只聊聊生產的一些實踐實用。在關於php項目的運行,咱們知道對比於java項目,少了不少繁瑣的步驟,至少不須要編譯,不須要生產war包。但實踐上關於php項目jenkins的自動化發佈的文檔也相對較少。那麼這裏就聊聊php項目的發佈和回滾是怎麼處理的。java
這裏有2種方式,一種是直接拉取gitlab上的代碼,直接同步到目標主機的站點根目錄中,爲了安全起見,是須要使用--exclude參數來排除.git目錄,以及一些關於git的敏感目錄進行排除,具體實踐,就看公司的程序猿怎麼說了。還有另一種方式,也差很少同樣的原理,但其中就多了一步,對拉取後的代碼同步到目標主機的代碼版本目錄當中,網站根目錄經過軟連接的方式實現站點的根路徑定義,這樣作的好處是若是須要回退到前期的某個版本,能夠直接從新定義軟連接便可實現快速回滾。這裏須要演示的就是第二種方案,若有更好的生產實踐方案,也歡迎各位大佬討論交流。node
主機說明 | IP地址 |
---|---|
Jenkins發佈主機 | 192.168.0.143 |
目標服務器主機 | 192.168.0.128 |
這裏須要注意的是: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
[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
添加全局憑據設置,爲了一下子能夠正常經過jenkins的web操做進行拉取代碼,這裏添加上面生成的祕鑰。web
Jenkins-->管理Jenkins-->憑據-->系統-->全局憑據-->添加憑據shell
建立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
任務名稱保持和目標網站根目錄一致,這樣能夠節省不少麻煩。首先進行參數設置,以下:安全
源碼管理,進行添加項目的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}"版本......"
點擊-->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
在上面能夠看到有多個版本號的代碼,隨意選擇一個版本,進行操做。點擊-->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項目發佈和回滾就作好了!!!