熱門分類
載入中…
目錄0%

🚀 GitLab CI/CD 入門:從 Runner 到 Pipeline 實戰部署

    🚀 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 與叢集設定》(企業版)》


    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級