[筆記] Jenkins-dood 建置與踩雷紀錄

R. H.
hobo engineer
Published in
5 min readJan 29, 2019

繼上次對 DooD 稍有概念後立馬 github 了一下一個較完整專案

在 docker-compose up 後能幫我們自動帶起 jenkins 專案 , 非常方便 !

但實際上建置的過程中卻採了一些問題,在此紀錄下

  1. 連接 volume 的問題

在 docker-compose.yml 檔案中,稍微了修改了原作者的配置
(主要修改的部分是 volume 連接那,欲將 host 上的 /share/Public/jenkins
mount 給jenkins container 內的/var/jenkins_home)

version: '3.2'#volumes:
# jenkins-home:
services:
jenkins:
image: jenkins_dood
build: .
restart: unless-stopped
ports:
- target: 8080
published: 8888
protocol: tcp
mode: host
volumes:
- /share/Public/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
container_name: my_jenkins

但實際上這樣直接運行卻會不斷報錯

原因是因為 jenkins 建立後,是以 "jenkins" 為使用者去對這資料夾做存取 ,而不是以 "admin" or "root" ,所以才會發生權限問題導致無法正常執行。
所以在此須先於 host 上改變 /share/Public/jenkins 的檔案權限,將其分派給一般使用者。

chown -R 1000:1000 /share/Public/jenkins

這行意思是將檔案使用者 與 群組皆指為 1000 給一般使者
詳細語法可參考此篇與下圖

截自鳥哥私房菜

接著再 docker-compose up 一次就可成功了 !

系統畫面

2. git clone 之 ssh key 認證問題

在 jenkins container 內加入 gitlab 的 ssh key ,且也可正常於 jenkins container 內執行 git clone 語法

但若以在 jenkins shell 上欲執行 git clone 語法卻頻頻報錯

原因跟第一個問題一樣,因為 ssh key 是以 root 為使用者去建立的 , 所以 jenkins 在執行時並沒有權限去讀取。

這邊爬文後找到了幾個解決方式 ,帶實際嘗試時卻不是每種方法都可以 work ,這邊紀錄一下實際可運作且我覺得較好用的。

首先 建立 sudo 語法 (docker container 通常沒有內建,要另外灌)

apt-get update
apt-get install sudo

接著切換至 /etc/sudoers 並編輯
將 jenkins ALL=NOPASSWD:ALL 加入

接著再接使用者切換至 jenkins (可以發現 "@" 前使用者的改變)

sudo -iu jenkins

最後在一樣畫葫蘆,以 jenkins 身分再建立一次 ssh key ,並以 jenkins shell 執行 command

此時已可成功執行 git 語法且執行外部 docker command
(p.s. DooD 所執行的 docker command 為呼叫 host 上的 docker command,所以在此 docker ps 所列出來的便是正在執行的 jenkins container)

--

--