GitLab: CI/CD
如何使用 GitLab CI/CD
👋 歡迎來到 Stackhero 文件中心!
Stackhero 提供即時可用的 GitLab cloud 解決方案,專為需要快速、安全且可擴展環境的團隊設計:
- 無限制的使用者、儲存庫、資料傳輸與 CI/CD 處理時間,讓您享有完全彈性。
- 只需一鍵即可輕鬆更新,確保您的環境隨時保持最新,無需停機。
- 自訂網域名稱並以 HTTPS 加密(例如 https://git.your-company.com),提升專業形象與安全性。
- 在您專屬的私有基礎架構上,享有穩定效能與強大安全性。完全隔離,無需擔心資源干擾。
- 可選擇託管地點:🇪🇺 歐洲或 🇺🇸 美國,滿足您的合規或延遲需求。
快速上手,專注於您的程式碼。Stackhero 的 GitLab cloud hosting 解決方案約 5 分鐘即可啟用。
介紹
GitLab CI/CD 是 GitLab 的一項強大且整合的功能,GitLab 是一個廣受歡迎的開源版本控制與協作平台。這個工具能協助您簡化並自動化軟體建置、測試與部署等關鍵階段,確保高品質應用程式能更快速且更可靠地交付。
舉例來說,透過 GitLab CI/CD,您可以設定自動化單元測試,當有新的 commit 推送到 GitLab 儲存庫時自動觸發。這些測試通過後,您的程式碼會被建置並部署到 staging 環境以進行進一步驗證。當所有 staging 測試都通過後,系統會將程式碼推升到 production 環境,讓最終用戶可以使用。
GitLab CI/CD 的一大特色是與 GitLab 本身的緊密整合。您可以直接在專案儲存庫中定義與管理 CI/CD pipeline,簡化整個工作流程的協調與追蹤。
GitLab CI/CD 支援多種程式語言、框架與工具,具備高度彈性,能滿足各類型專案需求。其可自訂的 pipeline 系統讓您能根據需求調整 CI/CD 流程的每個階段,無論是建置、測試還是部署到多個環境。
總結來說,GitLab CI/CD 是一套完整的解決方案,旨在自動化並優化軟體交付流程。它讓開發人員能專注於撰寫與改進程式碼,而平台則高效地處理各項營運任務。
如何在 GitLab CI 中建置 Docker 映像檔
如果您的專案儲存庫包含 Dockerfile 檔案,您可以自動化建置、執行,並在需要時將 Docker 映像檔發佈到 registry 的流程。
步驟 1:啟用 Docker in Docker (DinD) 支援
首先,請在 Stackhero 控制台中啟用「Docker in Docker」(DinD)支援。

啟用 DinD 支援會帶來安全風險,特別是當您希望隔離使用者並避免他們存取彼此的專案時。
步驟 2:設定 GitLab CI pipeline
接下來,請更新您的 gitlab-ci.yml 檔案,加入使用 DinD 建置 Dockerfile 的 pipeline 設定。以下為範例設定:
image: docker:29
build:
stage: build
services:
- name: docker:29-dind
alias: docker
variables:
# 指定 docker CLI 連線到 Docker-in-Docker 服務,透過其非加密(非 TLS)port。
# 請參考下方說明,了解為什麼 DOCKER_HOST 很重要。
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
before_script:
- docker info
script:
# 請將 "my-docker-image" 替換為您想要的映像檔名稱:
- docker build -t my-docker-image .
# 如有需要,可測試 Docker 映像檔:
# - docker run my-docker-image /script/to/run/tests
docker:29-dind 服務會在您的 job 旁啟動一個 Docker daemon,而 DOCKER_HOST 則告訴 docker CLI 要連線到這個 daemon。當您宣告 docker:dind 服務時,務必設定 DOCKER_HOST: 若省略此變數,CLI 會默默連到其他 daemon,導致即使服務設定錯誤,建置仍可能成功,進而隱藏真正的問題。DOCKER_TLS_CERTDIR: "" 會讓內部 job 網路上的 2375 非加密 port 可用。
如果想要更簡單的方式,您可以完全移除 services 區塊與這兩個變數:Stackhero 的 runner 已經透過掛載的 socket 提供可用的 Docker daemon,因此直接執行 docker build 就能運作。
如需更多有關在 GitLab CI 中建置 Docker 映像檔的說明,請參考 GitLab 官方文件。
使用 Testcontainers 執行測試
如果您的測試套件使用 Testcontainers,這是一個能在測試期間以可丟棄的 Docker container 啟動真實服務(如資料庫、訊息代理等)的函式庫,前述設定已經涵蓋所需。請保留 docker:29-dind 服務與這兩個變數:Testcontainers 會利用 DOCKER_HOST 連線到 Docker daemon 並與其啟動的 container 溝通,無需額外設定。
未設定 DOCKER_HOST 是 CI 中 Testcontainers 失敗最常見的原因。此時函式庫會退回使用 runner 掛載的 Docker socket,導致無法連線到自己的測試 container,通常會出現 Ryuk helper container 逾時的錯誤。