建置一個開發Web服務用的Docker環境 (II)
在建置一個開發Web服務用的Docker環境 (I)一文中我們提到建置客製化Image的需求
是因為Docker Hub之類的服務,雖然公開Repository是免費的
不過我們需要Private的,然而免費的只能有一個Repository,不敷使用
自己建置Repository Server又有需要權限管理、安全管理的問題
所以就選擇0金錢與維護成本的Dockerfile + 資料備份還原的方式來建立Image
讓協同開發者都有相同的開發與建置環境
是因為Docker Hub之類的服務,雖然公開Repository是免費的
不過我們需要Private的,然而免費的只能有一個Repository,不敷使用
自己建置Repository Server又有需要權限管理、安全管理的問題
所以就選擇0金錢與維護成本的Dockerfile + 資料備份還原的方式來建立Image
讓協同開發者都有相同的開發與建置環境
我們將以Jenkins為例,完成客製化的Jenkins Image
(一)、在全新的Jenkins容器逐步進行相關設定
(二)、建置好一個專案,進行打包備份
(三)、透過Dockerfile與備份檔,將備份的資料移至全新容器,做一個新的Jenkins Image
(一)、在全新的Jenkins容器逐步進行相關設定
(二)、建置好一個專案,進行打包備份
(三)、透過Dockerfile與備份檔,將備份的資料移至全新容器,做一個新的Jenkins Image
- 以下的步驟如果已經閱讀過這篇文章則可以快速看過去,這邊只是講得更詳細一點
- 開啟全新的Jenkins容器,打開首頁會看到要輸入啟動密碼
- 可以取得啟動密碼的方式有很多,
cat /var/jenkins_home/secrets/initialAdminPassword
或是啟動時會看到console有跑出來下列資訊,再把資訊複製貼上即可(每次都會不同)
- 因為我們還要裝Nodejs套件,選擇「Select plugins to install」
- 搜尋並勾選Nodejs Plugin
- 點擊「Install」就會開始安裝
有時候可能會因為網路環境安裝失敗,Retry就可以了
- 建立有管理者權限的使用者資訊
- 會看到成功訊息與Jenkins首頁 (沒有特別設定,但Jenkins似乎會自己抓語系,所以有中文介面)
- 點選「新增作業」
- 根據先前的情境,我們是bitBucket
輸入專案名稱並選擇「建置 Free-Style 軟體專案」
- 專案設置頁面
首先我們要先設定git的 repository,指向bitbucket的某個專案
並選擇「Add」
- 配置ssh key
將這些設定之後設定好之前,先確認是否已經將id_rsa
與id_rsa.pub
放置於Jenkins容器內的/var/jenkins_home/.ssh/
裡
這邊有兩點要特別注意- 如果擁有者(Owner)是
root
會因權限不足而無法讀取
Jenkins服務在該容器的執行身分是jenkins
所以要確保Owner是jenkins:jenkins
id_rsa
產生時,按照預設的權限是600
但這樣的權限會導致 Build image時權限不足而無法加到容器內
所以要記得特別將id_rsa
權限改成跟public keyid_rsa.pub
一樣的644
加進去之後再把容器內的權限改回來即可
切記,這組Key我們僅拿來Read Repository,不要做為其他用途
進入jenkins容器的指令:bash -c "clear && docker exec -it jenkins bash"
- 如果擁有者(Owner)是
- 設定Credential Key,如果當初建ssh key沒有密碼就不用輸入
username填上跟public key一樣的信箱即可
設定好後jenkins會立刻拿key去試,沒有警告訊息就可以繼續往下設定要確認bitbucket已經有把access key加入這個public key - 建置觸發程序與建置環境設定
這個Token,主要是用來之後可以用Shell script或Webhook觸發用的,觸發範例如下# USER_TOKEN可以在個人的管理頁面找到,也可以更新以確保Token的有效期限 curl http://localhost:18080/job/devAngular/build?token=WebBuild --user jenkins_admin:<USER_TOKEN>
設定好要給人呼叫的Token後
會發現建置環境那的「NodeJS Installation」沒有選項可選
是因為我們只裝Plugin,並沒指定要使用哪一版本的Node
我們先儲存專案,回到首頁 - 管理Jenkins → Global Tool Configuration
- 安裝 Nodejs
往下到NodeJS,我們選擇 NodeJS 8.9.3
全域的Package我們輸入npm@lastest @angular/cli
確保npm的版本是最新的用意是
可能會有非預期的錯誤,其實是npm的bug這類情況發生
但這類bug被提報後,通常很快會修掉
因此盡可能是新的才不會解到舊問題
當然也可以安裝你認為穩定的指定版本安裝好後,回到剛剛專案設置的頁面 - 建置環境與建置設定
建置環境選擇對應的Nodejs版本
接著再建置選擇執行Shell,並輸入以下指令npm install ng build rm -f /angular-dist/ cp dist/* /angular-dist/ #看你們佈署在哪個目錄下
完成後,假設我們已經進入開發,建置數次
我們開發中歷經了幾次成功與失敗,目前的頁面長的像這樣
我們開發中歷經了幾次成功與失敗,目前的頁面長的像這樣
覺得差不多可以讓其他人加入開發了,於是參考這篇
備份完成我們的資料,有了
還原的部分則是在Dockerfile下撰寫
備份完成我們的資料,有了
yt-backup.tar.gz
在 DockerProject/Jenkins/
目錄下還原的部分則是在Dockerfile下撰寫
- Jenkins Dockerfile 如下
第4、5行是共用容器的配置
第10、11行則是我們將我們所需的檔案,備份檔與ssh key放到/usr/share/jenkins/ref/
裡根據文件,所有想要最後Build出來放在/var/jenkins_home/
底下的檔案都要放那裡
如果我們直接在Dockerfile 建置image的階段,先放入/var/jenkins_home/
是無效的第13行,就是到該目錄解壓縮並把壓縮檔刪除
最後,第15、16行是將要裝的plugins放入並在build image時安裝 - 在 /DockerProject/Jenkins/ 下,輸入
docker build --force-rm -t jenkins/jenkins:ytTest .
- 在 /DockerProject/ 下,輸入
docker-compose up
這樣子,跑起來的Jenkins
會有
其他的開發者,就不需要進行步驟 1-17
只需要拿我們提供的ssh key跟備份檔案
就可以快速使用Jenkins並建置
也因此大大減少每個開發人員為了建置環境的時間成本
會有
jenkins_admin
管理者資訊與有建置過的devAngular job
其他的開發者,就不需要進行步驟 1-17
只需要拿我們提供的ssh key跟備份檔案
就可以快速使用Jenkins並建置
也因此大大減少每個開發人員為了建置環境的時間成本
不僅如此,未來主機或VM損壞了,只要這些相關檔案都在
因為容器化的特性,可以很快的另起爐灶
未來如果連網路設定都設定好,可以對外服務
更能確保穩定性與一致性
因為容器化的特性,可以很快的另起爐灶
未來如果連網路設定都設定好,可以對外服務
更能確保穩定性與一致性
留言
張貼留言