GitLab CI 踩坑

Mortence發表於2019-04-03

自動部署的工具也比較多,自己嘗試了幾種

  • codepipeline 阿里雲的服務,比較靠譜。但是缺點是每次部署都會在 oss 上生成一個包,也沒有自動清理之類的功能,時間一長,檔案就比較多了。oss 儲存也是按使用量收費的,清理起來比較麻煩,不清理錢包受不了,用了兩天放棄了
  • Travis-CI 大名鼎鼎,但是隻能配合 github 使用,我們使用的是自己搭建的 gitlab ,只能放棄
  • GitLab CI 都是 Gitlab 的工具,一家人配合起來應該效果不錯,決定試試
  1. 首先是安裝 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 中編輯一下設定,執行未標記的作業需要勾選

圖片

  1. 新增 .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}
  1. 檔案移動到專案目錄之後,執行的是 laravel 專案,storage 目錄會存在許可權問題

    • 刪除 gitlab runner 服務 gitlab-runner uninstall
    • 使用伺服器使用者重新安裝 gitlab-runner install --user=www-data
    • 重啟服務 sudo service gitlab-runner restart
本作品採用《CC 協議》,轉載必須註明作者和本文連結