🚀 GitLab CI/CD 入門:從 Runner 到 Pipeline 實戰部署
GitLab CI/CD 是目前最完整、最易上手的自動化部署工具之一。只要在專案中加入 .gitlab-ci.yml,就能讓程式碼自動編譯、測試並部署。
本篇從零開始,帶你從 Runner 設定、Pipeline 概念,到實際部署案例,一次掌握完整流程。
📌 第一章:什麼是 GitLab CI/CD?
CI/CD 是現代 DevOps 的基礎,由三部分組成:
- CI(持續整合):自動編譯、測試、Lint 檢查
- CD(持續部署/交付):自動佈署到測試環境或正式環境
- Pipeline:由多個 Job 組成的自動化流程
整個流程由 GitLab Runner 執行,因此 Runner 是系統的核心。
📌 第二章:GitLab Runner 介紹與安裝
2.1 Runner 類型
| Runner 類型 | 適用情境 |
|---|---|
| Shell Runner | 簡單環境、測試用、裸機執行 |
| Docker Runner | 最常用、隔離性佳、可使用不同 Base Image |
| Kubernetes Runner | 大型系統、雲端微服務、Pod 動態建立 |
2.2 Linux 安裝 Runner(官方方式)
# Debian / Ubuntu
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner -y
2.3 註冊 Runner
進入 GitLab → CI/CD → Runners → Register a runner 取得 token 後,在機器上執行:
sudo gitlab-runner register
# 輸入 GitLab URL
# 輸入 Token
# 選擇 runner executor (shell / docker)
2.4 Docker Runner(建議使用)
sudo gitlab-runner register \
--executor docker \
--docker-image "python:3.11" \
--description "docker-runner"
例如要用 NodeJS、Go、Java,只需要更換 Base Image。
📌 第三章:Pipeline 與 Job 基礎
GitLab CI/CD 設定檔為專案根目錄的 .gitlab-ci.yml。
3.1 最簡單的 Pipeline
stages:
- test
test_job:
stage: test
script:
- echo "Pipeline is working!"
提交後 GitLab 會自動觸發 Pipeline。
3.2 加入多階段流程
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
- npm run build
test:
stage: test
script:
- npm test
deploy:
stage: deploy
script:
- bash deploy.sh
這就是完整 CI/CD 典型流程(三階段)。
📌 第四章:實戰案例(Docker + GitLab Runner)
4.1 自動建置 Docker Image
stages:
- build
- push
variables:
IMAGE_NAME: registry.example.com/project/app
docker_build:
stage: build
image: docker:stable
services:
- docker:dind
script:
- docker build -t $IMAGE_NAME:$CI_COMMIT_SHORT_SHA .
4.2 推送 Image 至 GitLab Registry
docker_push:
stage: push
image: docker:stable
services:
- docker:dind
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
- docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
4.3 在遠端主機自動部署
deploy_prod:
stage: deploy
script:
- ssh root@10.10.10.11 "docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA && docker compose up -d"
only:
- main
📌 第五章:自動部署 Linux 服務(Nginx / Python / NodeJS)
Python App 自動部署:
deploy_python:
stage: deploy
script:
- ssh root@server "cd /srv/app && git pull && systemctl restart app.service"
NodeJS 自動部署:
deploy_node:
stage: deploy
script:
- ssh root@server "pm2 reload app"
Nginx Reload:
deploy_nginx:
stage: deploy
script:
- ssh root@server "nginx -t && systemctl reload nginx"
📌 第六章:最佳實務
- 🔒 使用 Masked Variables 保存密碼與 Token
- 🐳 建議使用 Docker Runner 以隔離執行環境
- 📦 使用 artifacts 保存 build 結果(例如 build/)
- 📤 部署階段只允許 main / production branch
- 🗄️ 記得清理舊 Pipeline artifacts 與舊 Runner logs
📌 第七章:完整專案結構(可上 GitHub)
project/
├── .gitlab-ci.yml
├── src/
├── docker/
├── deploy/
│ ├── deploy.sh
│ └── docker-compose.yml
└── docs/
📌 結語
GitLab CI/CD 是強大的 DevOps 工具,只要掌握 Runner、Pipeline Stages、Variables 以及自動部署流程,就能完整串起你的開發與發佈生命週期。 本篇入門文章已足以讓你建立 CI/CD MVP 流程,後續你也能加入 Unit Test、Code Quality、Canary Deployment 等更進階的功能。
下一篇將推出: 《GitLab + Proxmox:從 CI/CD 自動部署 VM、LXC 與叢集設定》(企業版)》
沒有留言: