Windows 上，本機用 Docker 安裝 GitLab
Tags: windows, docker, gitlab, webdev
Published: 2024-05-12 10:32:05

## 本篇要解決的問題

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

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

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

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

---

## 準備好 docker-compose.yml

新增一個名為「gitlab」的資料，裡面新增三個資料夾，以及一個 yml 檔，如下：

```
gitlab
  ├─config
  ├─data
  ├─logs
  └─docker-compose.yml
```

docker-compose.yml 的內容：

```yml
services:
  gitlab:
    image: gitlab/gitlab-ce
    container_name: gitlab-docker
    hostname: "gitlab.enrf"
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "http://192.168.11.111:8807"
        letsencrypt['enable'] = false
    volumes:
      - "C:/Docker/gitlab/gitlab/config:/etc/gitlab"
      - "C:/Docker/gitlab/gitlab/logs:/var/log/gitlab"
      - "C:/Docker/gitlab/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.127:8807

![GitLab 登入頁面.png](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/795qjtq7nl3y1hryzd0l.png)

---

## 找出管理員預設密碼

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

預設帳號是：root。

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

initial_root_password

打開這個檔案，就會看到預設密碼：

![預設密碼.png](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gzurfixqh8bs2qbrulto.png)

---

## 安裝 GitLab Runner

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

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

docker-compose.yml 的內容：

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

有二個地方要修改。

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

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

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

![新增runner.png](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k0w22lgbblcvt66sq5qa.png)

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

![token.png](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dfiaqkqvxsd9whrq570c.png)

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

```
docker-compose up -d
```

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

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

```
docker-compose exec gitlab-runner gitlab-runner register
```

執行後，會需要回答幾個問題。

URL、token，因為我們在運行 docker-compose 時都先填了，所以可以直接按下 Enter 確認。

後續的題目，因為 August 這邊只是為了測試 Runner 能不能執行，所以都先簡單回答：

```
Enter an executor: docker
Enter the default Docker image: alpine:latest
```

建立成功時，會顯示一個訊息：

```
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 專案產生靜態頁](https://www.letswrite.tw/gitlab-pages/)

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

```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 後台的專案裡，左側導覽列點擊「建置」>「流水線」，專案通過、失敗，都會看到圖示：

![pipelnie.png](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kc52jxjwprcc4tlf6z0m.png)

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

最後祝大家母親節快樂~