三海豹dind與GitLab Runner研究2

三海豹dind與GitLab Runner in Container研究-RHEL8

ZONGRU Li
12 min readAug 26, 2022

續前篇Runner機台架構:

現在要想辦法額外完成以下架構,再多一個runner但是是container

首先先單純化,要達成以下:

參考官方doc:

LINK

這邊選用上述的Option 1

這邊先選用tag版號:alpine3.15-v15.2.1

LINK

使用podman啟動該gitlab-runner container時調整為以下:

#官網上用docker的語法如下:
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
#我改用podman啟動上述runner語法,因為要指向podman的sock,語法改為以下:
sudo podman run -d --name gitlab-runner-container --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /run/podman/podman.sock:/var/run/podman/podman.sock \
gitlab/gitlab-runner:alpine3.15-v15.2.1
#上面主要先把後面執行podman所要對應的sock空間定義出來
#然後後續做register後生成檔案位置/srv/gitlab-runner/config空間也定義出來
#這樣該gitlab-runner container掛了重啟還能吃到register定義檔config.toml

看起來是指向去拉Redhat的image

所以我改為以下

#多docker.io
sudo podman run -d --name gitlab-runner-container --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /run/podman/podman.sock:/var/run/podman/podman.sock \
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1

看起來要先把目錄開好

在/srv目錄下開好gitlab-runner跟裡面的config目錄

再重跑上面建立container指令:

接著處理註冊

在剛才的頁面往下拉:

LINK
LINK

看起來原理就是起另一個gitlab-runner container來下register指令

到時候register的設定檔

會生成在/srv/gitlab-runner/config底下叫config.toml的樣子

但是語法上我需要調整為:

#register的臨時container語法:
sudo podman run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1 register
#過程容器起來處理register過程要填入以下
#1.GitLab instance URL
#2.token
#3.description也就是給這個runner一個名稱
#4.tag,我應該會填podman,containerrunner,cr
#5.maintenance note留空白
#6.runner executor就是選docker
#7.default image給docker.io/docker:20.10.16
============================改以下=================================
#後來想想應該要參考前篇方式給註冊Runner:

sudo podman run --rm -it -v \
/srv/gitlab-runner/config:/etc/gitlab-runner\
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1 register\
--non-interactive \
--name "podman-dind-container" \
--url "https://gitlab.com/" \
--registration-token "{我gitlab上面串runner的token}" \
--executor docker \
--docker-privileged=true \
--docker-host "unix:///var/run/podman/podman.sock" \
--docker-image "docker.io/docker:20.10.16"\
--docker-volumes "/run/podman/podman.sock:/var/run/podman/podman.sock" \
--tag-list "podman,containerrunner,cr"

對應到前面綁定的位置:

所以要打開實體機上的/srv/gitlab-runner/config的目錄權限

因為暫時搞不懂會是什麼帳號做寫入,直接先給777

再次註冊!

還是一樣:

進去從裡面看:

這邊是著重建runner container:

再次重跑註冊Runner:

後來所有container都關掉

我嘗試直接在上面開一個空檔案:

直接改/srv目錄權限:

#最後重建/srv/gitlab-runner/config目錄:
cd /srv
mkdir gitlab-runner
cd gitlab-runner
mkdir config
cd
#重建立gitlab-runner container(過程PV要用selinux模式,帶大Z)
sudo podman run -d --name gitlab-runner-container --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner:Z \
-v /run/podman/podman.sock:/var/run/podman/podman.sock \
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1
#另起gitlab-runner container專門來註冊(過程PV要用selinux模式,帶大Z)
sudo podman run --rm -it -v \
/srv/gitlab-runner/config:/etc/gitlab-runner:Z \
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1 register\
--non-interactive \
--name "podman-dind-container" \
--url "https://gitlab.com/" \
--registration-token "{網站上設定的Token}" \
--executor docker \
--docker-privileged=true \
--docker-host "unix:///var/run/podman/podman.sock" \
--docker-image "docker.io/docker:20.10.16"\
--docker-volumes "/run/podman/podman.sock:/var/run/podman/podman.sock" \
--tag-list "podman,containerrunner,cr"
重建gitlab-runner container
另起container只拿來註冊就結束,註冊檔會在容器內的/etc/gitlab-runner,對應實體目錄的/srv/gitlab-runner/config裡面!

查看GitLab網站上:

比對一下設定:

我用Container來取消註冊:

#容器內的runner取消註冊:
sudo podman run --rm -it -v \
/srv/gitlab-runner/config:/etc/gitlab-runner:Z \
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1 \
unregister --all-runners
原本上面那個不見了

再次調整為,主要修正預設的docker image:

#註冊:
sudo podman run --rm -it -v \
/srv/gitlab-runner/config:/etc/gitlab-runner:Z \
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1 register\
--non-interactive \
--name "podman-dind-container" \
--url "https://gitlab.com/" \
--registration-token "{gitlab網站上的runner註冊Token}" \
--executor docker \
--docker-privileged=true \
--docker-host "unix:///var/run/podman/podman.sock" \
--docker-image "docker:20.10.16" \
--docker-volumes "/run/podman/podman.sock:/var/run/podman/podman.sock" \
--tag-list "podman,containerrunner,cr"

爬文要解決這問題要執行gitlab-runner verify:

#執行verify:
sudo podman run --rm -it -v \
/srv/gitlab-runner/config:/etc/gitlab-runner:Z \
docker.io/gitlab/gitlab-runner:alpine3.15-v15.2.1 verify
哦哦哦!!!

試試:

暫時玩到這邊!

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet