2018/05/20

建置 Gitlab Ci/CD :: CD - 使用 Deployer

Deployer 是一套用途很廣泛的PHP部屬工具,
也有另一套 Laravel 的部屬工具 Ennoy
考量可能有其他的專案可能也需要部屬,我選擇 Deployer 來部屬。



安裝 與 起始化

安裝很簡單,方法請參考官方文件
安裝完後在 Laravel 專案執行
dep init -t Laravel

專案根目錄會建立 deploy.php 檔案


.gitlab-ci.yml 增加 deploy job


https://github.com/Aspertw/laravel_cicd_deployer/blob/done/.gitlab-ci.yml


  • image
    我使用 fabeat/php-deployer,因為我不喜歡每次要先安裝deployer。
  • variables
    會 pass 給 deployer.php,希望讓deploy.php可以重用。
  • script
    只有兩行;
    把 server deployer ssh private key 加進 ssh-key 內;
    執行 deployer。 除錯可以在後方加入 -vvv
  • only
    只在特定 branch 執行;例如可以設定 staging, production branch 才做 deploy。
  • when:
    on_success 前面測試成功才做
    manual 手動部屬


deploy.php 設定


我改動了蠻多的地方,簡單提一下我改的地方與原因

  • application, repository, host, deploy_path 等變數替代為 Gitlab 的環境變數
  • host
    - 增加 user 使用 deployer 登入
    - 增加 addSshOption('StrictHostKeyChecking', 'no') 登入時會出現 host auth failed.
    - overwrite artissan:optimize task。原始程式碼有判斷版本,不過我用5.6還是會執行optimize,只好複寫。

如果部屬有問題,就是一直 retry deply.php 直到專案部屬成功。
這中間會有蠻多問題要靠自己排除的 (攤手)


我測試時發生問題的可能解法

  • Host key verification failed.
    host() 加上 ->addSshOption('StrictHostKeyChecking', 'no')
  • [host] < bash
    deploy_path 格式錯誤或路徑不對
  • host not found
    使用虛擬網域要在git-runner config 加上 extra_host


Done!

兩個 stage 完成 CI/CD


QA Server 部屬成功

最後記得把 apache / nginx 目錄指到 current/public


參考文件

How to deploy Laravel application

沒有留言:

張貼留言