更新提醒(2026-10):本文寫於 2023 年,.gitlab-ci.yml 範例使用 only 關鍵字,gitlab-runner 的安裝腳本與註冊流程可能也可能已有調整,建議對照 GitLab 官方文件目前的寫法(例如 rules)。若想看另一種 CI/CD 做法,可參考 【CI/CD】Jenkins 打造安全的 Laravel 部署:JCasC 與受限 SSH。
GitLab
什麼是 CI/CD
CI (Continuous Integration)、CD (Continuous Delivery/Deployment) 目的是將測試、建置到部署的流程自動化,取代原本需要人工處理的工作。
- CI (Continuous Integration):專注在持續整合,透過程式碼的自動化測試和建置,將品質穩定的程式碼合併。越早、越頻繁地整合,整合難度就越低,也能確保最新版本是可以執行的。
- CD (Continuous Delivery/Deployment):專注在持續部署和交付,依照需要的環境進行建置和部署。
開始測試 CI/CD
首先註冊 GitLab,並將專案 push 到 GitLab 的 Project 上。
進入 GitLab → 專案 → Settings → CI / CD → 展開 Runners。

這些資訊是之後設定 gitlab-runner 時會用到的。
進入 VM 安裝 gitlab-runner:
sudo apt update
sudo apt install curl
sudo curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-runner
然後進行註冊:
sudo gitlab-runner register
依照畫面的提示,將 GitLab 頁面上的資料複製貼上,這裡的 executor 選擇 shell。

重新整理 GitLab 頁面後,會看到 runner 已經註冊成功。

之後的範例以 Laravel 框架為例。
主機上的環境設定就不多做說明。
.gitlab-ci.yml 範例
stages:
- test
- deploy
- cache
unit-test-job:
stage: test
tags:
- "runner_tag"
# 限制只有 master branch 會執行此 job
only:
- master
script:
- cd {project_path}
- php artisan test
cache-job:
stage: cache
tags:
- "runner_tag"
# 限制只有 master branch 會執行此 job
only:
- master
script:
- cd {project_path}
- php artisan cache:clear
- php artisan optimize
- php artisan view:cache
deploy-job:
# 宣告此 job 屬於哪一個 stage
stage: deploy
# gitlab runner 的 tags
tags:
- "runner_tag"
# 限制只有 master branch 會執行此 job
only:
- master
# 最後是此 job 要執行哪些動作
script:
- cd {project_path}
- git checkout master
- git pull origin master
- composer install
之後測試將 master branch 推上 GitLab,就會在 CI/CD → Jobs 看到執行結果:

CI/CD → Pipelines:

延伸閱讀
- 【CI/CD】Jenkins 打造安全的 Laravel 部署:JCasC 與受限 SSH:同樣是 Laravel 的 CI/CD,這篇改用 Jenkins,並處理 JCasC 與受限 SSH 的安全面
No comments yet.