Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. Visual Studio 的遠端偵錯:Windows
    2021/03/24 14:45
  2. Visual Studio 2019 16.9 支援使用 OpenMP LLVM
    2021/03/03 13:52
  3. Valve 推出完全支援 OpenXR 的 SteamVR 1.16.8
    2021/02/25 09:43

Blog 最新回應

  1. 加入斜體文字...
    2021/02/07 21:06
  2. 加入斜體文字...
    2021/02/07 21:06
  3. 加入斜體文字...
    2021/02/07 21:06

Keyword 關鍵字

C++17 Oculus Quest 2 OpenMP OpenCV Windows MR 開放資料 資料視覺化 開放資料 HTC Vive Pandas Boost OpenNI2 HTC Vive Pro GitLab Qt WebGL Valve Index MR iFlyover Kinect Oculus Rift S C++ VR OpenNI OpenXR OpenVR OpenGL C++11 CubeX ASUS Xtion Docker Pandas Python CUDA 3D立體 svn NiTE2 VR C++20 C++14 Java 3d print OpenCL HoloLens 2 HTC Vive Focus javascript Docker Python C++14 xml PHP 資訊地圖 Oculus git Vulkan

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

在 Synology NAS 上跑 gitlab-runner

Heresy 自從在去年在工作的環境架設了 GitLab 之後,就開始很認真地在搞 CI/CD 這塊了;而為了自動化流程的需要,目前也有好幾台電腦、都拿來安裝 gitlab-runner 作為接 CI/CD 的工作機了~

由於 Heresy 這邊 CI/CD 的工作基本上都是大量編譯,所以也都是拿比較高檔的電腦來做為 runner;但是這次,因為想要試試看自動將網站的容器佈署到測試機器上,由於負載不會太高,所以才會考慮拿手邊的 Synology DS918+(官網)這台多功能的 NAS 來用。

不過,實際用起來,這才發現…要成功架設到能用的難度好高啊…

下面則是 Heresy 這次試著讓他可以正常運作後,整理的設定方法。


透過 DSM 安裝 Docker

Synology 的 NAS 基本上是以「DiskStation Manager」(DSM、官網)來做為主要的管理介面;而要安裝軟體的話,主要的方法就是透過他的「套件中心」。

由於在「套件中心」中可以直接找到 Docker 的選項,所以要安裝 Docker 基本上算是相當簡單的。


透過 SSH 修改 Docker 的設定

雖然 DSM 的 Docker 安裝好了之後,的確可以馬上開始使用;但是如果是像 Heresy 這邊一樣使用 GitLab 自己建立了非 https 的 Docker Registry 的話,其實理論上是要修改設定、將自己的 Docker Registry 加入「insecure-registries」的。

不過,在 DSM 的 Docker 設定介面裡面,並沒有辦法設定「insecure-registries」…

所以如果有這樣的需求的話,則是需要使用 SSH 連進去修改 Docker 的設定檔了。
(在「控制台」的「終端機 & SNMP」裡面可以開啟、設定 SSH 的相關功能)

而 Synology 的系統雖然也是 Linux,但是由於有經過他們一定程度的調整,所以相關的設定和其他系統都不大一樣,所以在設定上又得另外找方法了…

首先,Synology 系統的 Docker 設定檔放在「/var/packages/Docker/etc」,檔名也不叫做「daemon.json」、而是「dockerd.json」;所以如果要修改 Docker 的設定的話,就是要修改「/var/packages/Docker/etc/dockerd.json」這個檔案。
(似乎沒有 nano 這類的編輯器,只有 vi 就是另一個問題了…)

Heresy 這邊的設定檔是改成:

{
   "data-root": "/volume1/docker",
   "log-driver": "db",
   "registry-mirrors": [],
   "insecure-registries": [ "example.com:5100" ] }

其中,「data-root」的修改,是讓他改把資料存在 RAID 的磁碟空間上。
而「insecure-registries」則就是要加入自己架設的 Docker Registry 路徑了。

在修改完設定檔案,則是呼叫「synoservice --restart pkgctl-Docker」這個指令、來重新啟動 Docker。


使用 SSH 設定 Docker 版的 gitlab-runner

雖然 Synology NAS 採用的是 Linux 系統,也可以開啟 SSH 進去做控制,但是問題是他所採用的系統版本算是經過大幅度地客製化過的,所以和一般 Ubuntu 有相當地不同,所以也沒辦法自行下載官方的 gitlab-runner 來安裝(官方文件)。

儘管在 DSM 的 Docker 介面可以快速地建立出 Docker 版的 gitlab-runner,但是透過 DSM Docker 的介面,在設定上卻有一些限制,導致無法完成必要的設定…

所以,這邊還是需要使用 SSH、來進行手動的操作。這邊使用的指令,是:

docker run -d --name gitlab-runner --restart always 
  -v /var/run/docker.sock:/var/run/docker.sock 
  gitlab/gitlab-runner:latest

這邊的重點,是要加上 volume mapping,把 /var/run/docker.dock 對應到 gitlab-runner 的容器內,這樣他才可以操作 Docker。

而在容器跑起來之後,則是要再進去,連結到自行架設的 GitLab 網站。這邊可以先在 SSH 中執行:

docker exec -it gitlab-runner bash

以進入剛剛建立的「gitlab-runner」這個容器內,然後就可以執行「gitlab-runner register」(官方文件),一步一步完成設定了~

這邊要注意的是,「executor」的部分應該是要設定成「Docker」;而預設映像檔,也建議直接用 Docker 就好。

而由於 Docker 容器裡面還是要進行 Docker 的操作,所以這邊還需要手動修改 gitlab-runner 的設定檔;這個檔案是容器內的「/etc/gitlab-runner/config.toml」。

在裡面的 [[runners]] 下的 [runners.docker] 中,有一個「volumes」的陣列,裡面本來應該只有「"/cache"」,這邊要把 docker.sock 也加進去。

[["runners"]]
   [runners.docker]
     volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache"]

基本上大概就是像上面這樣(檔案中還有很多其他東西,這邊都省略了)。

之後,再執行「gitlab-runner restart」重新啟動 gitlab-runner 就可以了。


理論上,這樣修改後應該就可以正常地在 gitlab-runner 裡面去執行 docker 的命令了~

當然,如果是要讓他能動,應該也還有其他方法,在《Building Docker images with GitLab CI/CD》這邊也有提到「docker-in-docker」的方案;不過感覺要弄起來,也不會比較簡單,所以現階段就還是先用這個方法來玩了。

如此一來,就可以在 GitLab CI 腳本裡面,去自動把建立好的 Web Service Docker 在 Synology 的 NAS 上面跑起來做測試了~

張貼者:heresy於2020/03/09 13:45 下午有0則回應,瀏覽次數:633次

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail