Windows 上,本機用 Docker 安裝 GitLab

Windows 上,本機用 Docker 安裝 GitLab
Windows 上,本機用 Docker 安裝 GitLab

2025.05.22 更新:更新部份內容及程式碼。

本篇要解決的問題

有時公司會使用自架的 Git Server,而不是直接使用現有的 GitHub、GitLab,本篇是使用 Docker,在本機安裝 GitLab,再加上 GitLab Runner,這樣就可以有自己的版控功能,也可以寫檔案做自動化測試。

跟一般教學文不同的是,大部份自架 GitLab,都會講到怎麼裝上 SSL。

但 August 實測後發現,本機產生的憑證會一直有問題,即便用的是 OpenSSL,也沒有辦法推拉專案,所以本篇不會有裝 SSL 的部份。

如果有知道怎麼在本機 Docker 裝 SSL 的棒油,歡迎留言提供方式。

另外,因為 官方文件 裡有說,ARM 上會有問題,而 August 在試著用 Mac 安裝時,也是怎麼樣都安裝不起來,因此本篇才會是寫安裝在 Windows 上。


準備好 docker-compose.yml

新增一個名為「gitlab」的資料,裡面新增一個 yml 檔,如下:

gitlab
  └─docker-compose.yml

docker-compose.yml 的內容:

services:
  gitlab:
    image: gitlab/gitlab-ce
    container_name: gitlab-docker
    hostname: "gitlab.letswrite"
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "http://192.168.11.111:8807"
        letsencrypt['enable'] = false
    volumes:
      - "./config:/etc/gitlab"
      - "./logs:/var/log/gitlab"
      - "./data:/var/opt/gitlab"
    ports:
      - "8807:8807"
      - "8808:22"

external_url 'https://192.168.11.111:8807',這邊的 IP 請改成自己的 IP,因為目標是建起來後,同網域的大家都可以使用,所以填寫的是 192.168 開頭的。

Port 的部份,因為 August 本機的 80、22 都被別的程式佔用了,所以改用別的 Port。

開啟終端機,執行:

docker-compose up -d

執行完後,當看到 Container 被建起來了,大概還要再等 5 分鐘,網站才打得開。

打開瀏覽器,網址輸入我們寫在 docker-compose.yml 上的,像這邊的範例就是:http://192.168.11.111:8807

GitLab 登入頁面.png
GitLab 登入頁面.png

找出管理員預設密碼

看到了 GitLab 架好後,問題來了,GitLab 預設會提供一組管理員的帳號,登入這個帳號的帳密是什麼?

預設帳號是:root。

密碼的部份,我們的資料夾裡,剛有開了一個「config」的空資料夾,當 GitLab 安裝好,會看到裡面多了很多檔案,其中有一個叫:

initial_root_password

打開這個檔案,就會看到預設密碼:

預設密碼.png
預設密碼.png

或是,也可以用命令來找:

# Linux
sudo docker exec -it <container_name> grep 'Password:' /etc/gitlab/initial_root_password

# Windows
docker exec -i <container_name> grep "Password:" /etc/gitlab/initial_root_password

<container_name> 就是 docker-compose.yml 上的 container_name

輸入完帳密,就會登入了,記得先修改密碼。


安裝 GitLab Runner

GitLab Runner 要另外安裝,不直接裝在 GitLab 的專案裡。

新開名為「gitlab-runner」的資料夾,裡面放一個 docker-compose.yml 的檔案。

docker-compose.yml 的內容:

services:
  gitlab-runner:
    image: "gitlab/gitlab-runner:latest"
    container_name: "gitlab-runner"
    restart: always
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./config:/etc/gitlab-runner"
    environment:
      - "CI_SERVER_URL={GitLab URL}"
      - "REGISTRATION_TOKEN={Runner 註冊 token}"

有二個地方要修改。

第一個,CI_SERVER_URL 要填寫的是我們 GitLab 的網址,像本篇的範例就是填:http://192.168.11.111:8807

第二個,REGISTRATION_TOKEN,這要從 GitLab 後台建立 Runner 時取得,步驟如下。

1 登入管理員帳號後,照下圖的順序點擊:

新增 Runner
新增 Runner

接著會開始填寫 Runner 的資料,都選好、填好後,點擊「創建執行器」,下一個畫面,就會看到 token:

取得 Token
取得 Token

把 token 貼上 docker-compose.yml 上,然後開啟終端機,執行:

docker-compose up -d

執行完後,Container 上就會看到 gitlab-runner 正在運行。

接著終端機上繼續輸入以下並執行:

docker-compose exec gitlab-runner gitlab-runner register

執行後,會被陸續問幾個問題,前二題我們的 docker-compose.yml 檔都寫了,直接按 enter。

接著會問:

Enter an executor: docker-windows, docker+machine, instance, kubernetes, docker-autoscaler, custom, shell, ssh, parallels, virtualbox, docker:

因為我們是用 Docker 安裝的,請輸入 docker

接著會問:

Enter the default Docker image (for example, ruby:2.7):

這邊就按照自己專案的需求,填寫不同的 image 名稱,以下是 ChatGPT 建議的:

  • 你要跑 Node.js 專案:node:20
  • 你要跑前端 build:node:20-alpine
  • 你要跑 Python 專案:python:3.12
  • 你只是要 bash/sh 腳本:alpine:latestubuntu:22.04

有特定語言需求,就填對應的語言版本,如果只是跑指令、沒特別需求,用 alpine:latest

這題答完後,就會看到 config.toml 新增完成:

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

意思就是 Runner 的 config 檔已經建立在 /etc/gitlab-runner/config.toml 裡。

我們所在的 gitlab-runner 資料夾,也會看到這個檔案,打開來會看到內容。


測試 Runner

為了測試 Runner 有沒有活跳跳,我們建一個專案來測試。

建專案時可以直接用 GitLab 提供的範本,這邊 August 選用「Pages/Plain HTML」這個。

建好後,把專案 clone 到我們本機,因為是範本建立的,所以本身就會有一個「.gitlab-ci.yml」,這個檔就是觸發我們 Runner 用的。

範本裡的這個檔案,原本的寫法是把專案架成靜態頁面,因為我們沒有做其他配置,所以執行起來一定會失敗。

幾年前 August 有寫一篇,是怎麼用 GitLab 來架靜態頁的方法,有興趣的朋友再自行研究囉:

GitLab Pages:3 + 3 個步驟讓 GitLab 專案產生靜態頁

這邊是為了測試,我們簡單的用個 tidy 來測試 html,把 .gitlab-ci.yml 的內容改成以下:

stages:
  - test

test_job:
  image: alpine:latest
  stage: test
  before_script:
    - apk update
    - apk add tidyhtml
  script:
    - echo "Running basic test..."
    - find . -name "*.html" | xargs tidy -q -e
  tags:
    - runner

tags 寫 runner,是 August 在建立 Runner 時,有寫要認這個 tag 才會執行 Runner。

修改好後,推上 GitLab。

進到 GitLab 後台的專案裡,左側導覽列點擊「建置」>「流水線」,專案通過、失敗,都會看到圖示:

流水線
流水線

以上,便是怎麼在 Windows 的本機,用 Docker 安裝 GitLab,以及 GitLab Runner。

最後祝大家母親節快樂~

Summary
Windows 上,本機用 Docker 安裝 GitLab
Article Name
Windows 上,本機用 Docker 安裝 GitLab
Description
探索如何在 Windows 系統上透過 Docker 快速安裝和設置 GitLab 及 GitLab Runner,實現版本控制和 CI/CD 流程的本地化管理。
August
Let's Write
Let's Write
https://letswritetw.github.io/letswritetw/dist/img/logo_512.png
訂閱
通知
guest

0 Comments
最舊
最新
Inline Feedbacks
看所有留言