Gitlab-CE Runner Self-Host on Debian 教學

前言

如果只是想要把專案設定為私人
架設 Gitlab 並不是一件必要的事情
但如果想要嘗試一套比較完整的 CI/CD
自己架站,可以省掉很多時間、金錢
安裝過程其實官網已經講得很清楚
這邊只是做個紀錄,補一些踩過的坑
讓我們開始走一趟 Gitlab-CE Runner Self-Host on Debian 吧

環境

我這邊推薦使用虛擬機
因為效能需要的並不高
虛擬機也更可以掌握備份、還原
下面是我使用的 VM 設置,給各位參考,再依照實際需求調整

  • CPU: 6 core(i7-6700k)
  • RAM: 8G
  • Disk: 250G
  • OS: Debian 11
  • User: 全文皆使用 root 登入,所以不會看到 sudo

安裝流程

  1. 增加虛擬記憶體 SWAP
  2. 安裝 Docker
  3. 安裝 Gitlab-CE
  4. 編輯 Gitlab Config
  5. 安裝 CI Runner
  6. 註冊 CI Runner
  7. Grafana for Gitlab
  8. 更新 Gitlab

增加虛擬記憶體 SWAP

因為我這邊資源有限
也預設 Gitlab 只有我使用
並不想給個 16G、32G 的 RAM

引用自 ArchWiki

Swap space can take the form of a disk partition or a file. Users may create a swap space during installation or at any later time as desired. Swap space can be used for two purposes, to extend the virtual memory beyond the installed physical memory (RAM), and also for suspend-to-disk support.

SWAP 作為 Linux 的虛擬記憶體,如果不是追求極致的效能
我們可以分配剛剛好的記憶體給 VM,加上一定大小的 SWAP
相信足以讓這個 Gitlab 可以處在一個健康的狀況

# 我這邊分配 3G,依需求再更改
fallocate -l 3G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

使用 vim or nano 編輯 /etc/fstab
新增下面這行

/swapfile swap swap defaults 0 0

檢查是否正確引入

swapon --show

如果顯示像下面,就成功了

安裝 Docker(選擇)

我大部分是要將專案編譯成 Docker Image
並且是傾向使用 Host 端的 docker.sock
所以我會安裝好 Docker,給 CI-Runner 使用

apt-get update && \
apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release && \
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update && \
apt-get install -y docker-ce docker-ce-cli containerd.io

這腳本是 2021.9 Docker 官網提供的
基本上整份複製執行,不太會有問題

安裝 Gitlab-CE Runner Self-Host on Debian

先依照官網提供,安裝必要的套件

apt-get install -y curl openssh-server ca-certificates perl && \
apt-get install -y postfix

安裝 Gitlab 本體

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash && \
EXTERNAL_URL="https://gitlab.tocraw.com" apt-get install gitlab-ce

編輯 Gitlab Config

編輯 /etc/gitlab/gitlab.rb
依照需求再看是否要新增

  • 寄信通知功能(使用 Gmail)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587

# 這邊要換成你的寄信信箱
gitlab_rails['smtp_user_name'] = "[email protected]"

# 記得去申請應用程式專用密碼
gitlab_rails['smtp_password'] = "NNNNNNNNNNNNNN"

gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/classes/ActionMailer/Base.html
  • 收信,讓 Gitlab 可以收信來新增 Issue
gitlab_rails['incoming_email_enabled'] = true

# 這邊要換成你的寄信信箱
gitlab_rails['incoming_email_address'] = "XXXXXXXXX+%{key}@gmail.com"
gitlab_rails['incoming_email_email'] = "[email protected]"

# 記得去申請應用程式專用密碼
gitlab_rails['incoming_email_password'] = "NNNNNNNNNNNNNN"

gitlab_rails['incoming_email_host'] = "imap.gmail.com"
gitlab_rails['incoming_email_port'] = 993
gitlab_rails['incoming_email_ssl'] = true
gitlab_rails['incoming_email_start_tls'] = false
gitlab_rails['incoming_email_mailbox_name'] = "inbox"
gitlab_rails['incoming_email_idle_timeout'] = 60
gitlab_rails['incoming_email_expunge_deleted'] = true
  • Grafana, Prometheus

Gitlab 有內建 Grafana
是利用 Prometheus 來監測
會存大量的資料,吃掉一大堆硬碟空間
當初沒設定只存 2 天,花了好久才發現是平常絕對不會想到的硬碟空間沒了

prometheus['flags'] = {
  'storage.tsdb.path' => "/var/opt/gitlab/prometheus/data",

  # 我設定成 2 天,在看需求修改
  'storage.tsdb.retention.time' => "2d",


  'config.file' => "/var/opt/gitlab/prometheus/prometheus.yml"
}
  • 備份存放天數

未來每一次升級,或者手動備份
都會產生一個備份檔
這個設定會偵測備份目錄中的生成日期
我設定為 3 天(86400 x 3)
超過 3 天的備份檔案都會被刪除

gitlab_rails['backup_keep_time'] = 259200

全部設定完成之後
再輸入以下指令重啟生效

gitlab-ctl reconfigure

安裝 CI Runner

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | bash && \
apt-get install gitlab-runner

註冊 CI Runner(Docker)

這邊需要先登入 Gitlab,取得 runner 所需要的 token
如果是按照上述步驟安裝
應該都還沒有登入過
初次安裝完的密碼,如果沒有記錄下來
可以輸入下列指令查詢

cat /etc/gitlab/initial_root_password

登入 Gitlab 後
Menu – > Admin -> Overview -> Runners -> Register…
點選 👁 可以看到 token,待會註冊的時候會用到

Gitlab-CE Runner Self-Host on Debian
# 記得將下面的 your-token 換成上面的 token
# 還有 url 換成 gitlab host
gitlab-runner register -n \
    --url https://gitlab.tocraw.com/ \
    --registration-token your-token \
    --executor docker \
    --docker-image docker:latest \
    --description gitlab-runner \
    --run-untagged="true" \
    --locked="false" \
    --access-level="not_protected" \
    --docker-privileged \
    --docker-volumes /var/run/docker.sock:/var/run/docker.sock

Grafana for Gitlab

上面有稍微提到,Gitlab 安裝會預設使用 Prometheus 收集資料來給 Grafana 顯示
但 Grafana 要去哪兒打開呢
先到 Menu – > Admin -> Settings -> Metrics – Grafana
勾選 Add a link to Grafana

Gitlab-CE Runner Self-Host on Debian

然後就可以在 Menu – > Admin -> Monitoring 裡面看到 Metrics Dashboard

Gitlab-CE Runner Self-Host on Debian

就會引導到登入畫面

Gitlab-CE Runner Self-Host on Debian

登入過後如下圖
蠻多看板可以選擇,有興趣可以一個一個看~

Gitlab-CE Runner Self-Host on Debian
Gitlab-CE Runner Self-Host on Debian

更新 Gitlab

因為我們使用的是 debian 的 apt 來安裝
自然更新的時候也很方便的使用 apt 來更新

apt update && apt upgrade -y

結論

以上是我親身安裝過後
自己架 Gitlab,可以多玩玩各種 Issue, CI, CD
讓自己技能樹越來越廣~


毛毛

可愛宅宅工程師、內容創作者
興趣是寫東東、寫東東跟寫東東。

Follow @Chindada Sponsor