使用git做服務器端代碼的部署


傳統部署方案
     windows 遠程桌面
     FTP/SFTP
     登錄服務器pull github代碼
     Phing(PHP專業部署工具)

git 自動部署流程圖
     

 



服務器端准備工作:
     0. 這些工作都在root或有管理權限的帳號下進行,下面以root為用戶,切換到其他用戶的時候會提示
     1. 確保安裝了git
     2. 為了安全起見,新建一個專門用於代碼部署的無特權用戶
                useradd -m deployuser
                passwd deployuser #設置該用戶的密碼,也可根據喜好配置成免密碼登陸
     3. 新建一個目錄作為要部署代碼的根目錄,如:
                mkdir /var/www/html/deploy
     4. 將這個目錄的屬主和屬組都改為上面新建的用戶deployuser
                cd /var/www/html
                chown deployuser:deployuser deploy
     5. 切換到部署代碼的專用用戶
                su deployuser
     6. 進入項目根目錄,初始化為git倉庫
                cd deploy
                git init
     7. 【重要】讓倉庫接受代碼提交
                git config receive.denyCurrentBranch ignore
                [可選] git config core.worktree ~/www
                [可選] git config --bool receive.denyNonFastForwards false #禁止強制推送
     至此,一個空的git倉庫就在服務器上建好了,倉庫的地址為:
                ssh://deployuser@ipaddress/var/www/html/deploy/.git

本地倉庫准備工作:
     1. 通過 git clone 或 git pull 從 github 倉庫上將代碼獲取到本地
     2. 將服務器添加到遠程倉庫列表,使用名字來區分不同的服務器,如測試服務器可以叫做testing
                git remote add testing ssh://deployuser@ipaddress/var/www/html/deploy/.git
     3. 將本地代碼提交到測試服務器上面
                git push testing master

回到服務器端:
    1. 更新服務端 git 倉庫狀態並檢出文件
                cd /var/www/html/deploy
                git update-server-info

                git checkout -f
        OR:
                git checkout branch_name # 如果push的不是master分支

    2. 檢查是不是將文件更新進來了
    3. 設置服務器端更新鈎子 post-update
              cd .git/hooks
       新建 post-receive 或將 post-receive.sample 重命名為 post-receive
              touch post-receive
       OR:
              mv post-receive.sample post-receive
              vim post-receive
       將如下內容復制到文件中
                 #!/bin/sh
                 unset GIT_DIR
                 cd ..
                 git checkout -f
       注: 第3步的操作將post-receive 替換為 post-update也可以, 不過需要先將post-update中的exec git update-server-info這一行刪掉

后續代碼的更新:
     1. github 有更新的時候 pull 更新本地部署倉庫
     2. 然后本地先 push 到測試服務器進行測試
     3. 測試通過之后 push 到正式服務器進行上線
     4. 代碼的回滾:
               *服務器端回滾:推薦 git reset --hard HEAD^
               本地倉庫回滾: 無需登陸服務器即可實現代碼回滾,git reset HEAD^ 保留代碼回滾,然后使用 git push remote_name local_branch_name -f 強制推送

使用過程中需要注意的問題:
     1. 需要約定好 git 不能更新的操作要怎么處理,比如新增數據庫的字段,新安裝必要的擴...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM