自動部署的工具也比較多,自己嘗試了幾種
- codepipeline 阿里雲的服務,比較靠譜。但是缺點是每次部署都會在 oss 上生成一個包,也沒有自動清理之類的功能,時間一長,檔案就比較多了。oss 儲存也是按使用量收費的,清理起來比較麻煩,不清理錢包受不了,用了兩天放棄了
- Travis-CI 大名鼎鼎,但是隻能配合 github 使用,我們使用的是自己搭建的 gitlab ,只能放棄
- GitLab CI 都是 Gitlab 的工具,一家人配合起來應該效果不錯,決定試試
-
首先是安裝 gitlab runner 沒什麼好說的,按文件來就行了 中文文件
需要注意的是安裝完成後註冊的時候,選擇 Runner executor 的時候,根據自己需要選擇,我沒有使用 docker 就選擇了 shell
如果 gitlab 中專案比較多的話,建議註冊的時候使用指定專案的 token 註冊,而不是使用管理員賬號中的 token。使用管理員提供的 token 註冊的是共享 runner,會導致每個專案都會觸發部署任務。 token 可以在指定專案的 settings/ci_cd 頁面中的 runner 選項找到。在 settings/ci_cd 頁面的 runner 中看到 runner 即為註冊成功。
這裡我有一個大坑,push 之後程式碼 Pipelines 卡住了,提示沒有可以使用的 runner 。如果出現這種情況,需要在 註冊成功的 runner 中編輯一下設定,執行未標記的作業需要勾選
- 新增 .gitlab-ci.yml
stages:
- install_deps
- deploy_test
- deploy_production
variables:
WORK_DIR: 專案目錄
cache:
paths:
- vendor/
- node_modules/
# 安裝依賴
install_deps:
stage: install_deps
only:
- dev
script:
- composer install --no-ansi
# 部署測試伺服器
deploy_test:
stage: deploy_test
only:
- dev
script:
- php artisan cache:clear
- rsync -rapq --exclude .git/ ./ ${WORK_DIR}
-
檔案移動到專案目錄之後,執行的是 laravel 專案,storage 目錄會存在許可權問題
- 刪除 gitlab runner 服務
gitlab-runner uninstall
- 使用伺服器使用者重新安裝
gitlab-runner install --user=www-data
- 重啟服務
sudo service gitlab-runner restart
- 刪除 gitlab runner 服務