[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD

[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD


目錄
  1. 為什麼需要 CI/CD?
  2. 小型工作室/個人開發者也可以搭建 CI/CD 嗎?
  3. 運用 NAS 搭建個人 CI/CD 好處
  4. 打造私人 Git 伺服器:GitLab 安裝與設置
  5. 建置自動化部署官家:Jenkins 安裝與設置
  6. 案例分享: 以 Line Bot 開發為例
 

為什麼需要 CI/CD?

 
近幾年隨著 DevOps 這個軟體開發概念的興起,也越來越多人開始討論 CI/CD 的這個議題。CI/CD 的精神就是快速迭代、持續驗證,除了把大目標模組化地拆為小目標,也能在開發過程中不斷確認是否符合原始需求,並且持續修正開發方向。有時相關的深入討論看多了,不免覺得有點像玄學 XD。但 CI/CD 的核心精神很簡單,就是將一些日常繁瑣的開發、部署流程自動化(例如:環境建置、單元測試、日誌紀錄、產品部署等等)。
 

小型工作室/個人開發者也可以搭建 CI/CD 嗎?

 
有些人或許覺得只有大公司才有資源進行 CI/CD,或是龐大而複雜的專案才有導入 CI/CD 的需求。當然,若要購置雲端的企業解決方案,其月租費支出通常不小。但當本地端已經有一些閒置舊電腦、樹莓派,或是 NAS 的話,則很適合搭建精省版的 CI/CD 解決方案。再者,小型工作室/個人開發者通常人力、物力上就很有限,如果能將耗時繁瑣的開發部署流程,利用機器幫忙自動化,就能把能量投注在更高層次的開發上。幾乎可以說,越是人力有限的團隊,越需要建立專屬於團隊的 CI/CD!
 

運用 NAS 搭建個人 CI/CD 好處

 
以往我曾經使用樹莓派協助部署的相關工作,但樹莓派的缺點在於算力不強、儲存空間不大且不夠可靠,因此幾乎只能用來對遠端 server 下 command,或是定期監測 server 狀況、測試部署後的系統功能是否正常。

因此,有了 NAS 之後,便試著將解決方案移轉至 NAS 上,剛好 Synology NAS 內建超無痛的 Docker 套件可以使用,幾乎想得到的 Docker Image 幾乎都可以無痛在上面直接運行。NAS 的好處是儲存空間相較可靠,因此很適合在上面架設 git 伺服器(例如 GitLab),一舉解決版本控制、程式碼儲存、資料儲存的需求。自己架的 Git 伺服器不僅自主性高,更重要的是可以打破公有雲版本的 git push 單一檔案最大限制呀!
(不過建議還是要做好單一大檔案的管理,不要什麼檔案都一股腦推上去 😅)
 

打造私人 Git 伺服器:GitLab 安裝與設置

 
在 Synology 的 NAS 上安裝 GitLab 非常簡單。
首先,只要點擊套件中心:
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
並且在第三方套件點擊安裝「GitLab」:
(不確定這個 logo 是怎麼來的,和官方的可愛小狐狸好像有點差異…但這的確是官方提供的套件!)
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
另外,因為這個套件是基於 Docker Image 的應用,所以安裝過程會順便幫你安裝 Docker:
(因此就算升級到 DSM 7.0,在套件中心找不到 GitLab 套件,還是可以用 Docker 自己手動安裝。)
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
使用套件中心安裝的好處在於在安裝過程中,畫面會很貼心的引導你填入配置所需的參數:
(直接使用 Docker 安裝則需要手動配置環境變數及其他參數)
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
依照提示填入網域名稱、email 資訊:
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
建議開啟 SMTP ,並填入 SMTP 相關資訊:
我個人是使用 mailgun 這家的免費寄信服務,推推!
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
完成這步,GitLab 服務就會自動啟動了!
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
安裝完成後,可以看到多了 Docker GitLab 與 Docker 兩個套件:
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
點擊 Docker GitLab 或是在瀏覽器輸入 http://NAS IP 位址:30000 (第一步設定的埠號)
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
登登!一個私人的 GitLab 伺服器就這麼架好了!
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD

 

建置自動化部署官家:Jenkins 安裝與設置 

Jenkins 的安裝過程則是在 Docker 這個套件中,
在倉庫伺服器中搜尋「jenkins」
(因為這個映像檔太熱門,所以其實不用搜尋就已經在畫面第三行了)
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
在這裡我們以目前的最新版本(2.7.4)示範
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
到「映像檔」分頁,雙擊「jenkins」
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
點擊進階設定
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
500008080 這兩個 port 沒有被其他服務佔用的話,建議直接在左邊這欄設置 500008080
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
新增容器前再度確認埠號正確
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
這時 Docker 容器已經正在啟動,進到「容器」分頁
右鍵點擊「jenkins」-> 詳細資訊
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
在日誌這裏有一段金鑰,我們要把它複製起來,稍後設定會用到
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
若在日誌中找不到金鑰,則可以進到「終端機」
新增一個 bash,
輸入:cat /var/jenkins_home/secrets/initialAdminPassword
把密碼讀出來,一樣複製到剪貼簿
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
接著,在瀏覽器輸入 http://NAS IP 位址:8080 (第一步設定的埠號)
就可以進入 Jenkins 的起始設定頁面
這時就要貼上我們剛剛複製的密碼
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
可以選擇安裝社群推薦的常見 Plugins 或是完全自訂
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
要建立第一個管理員帳號:
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
接著就會進到插件安裝介面:
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
安裝完插件後就完成整個設定流程了!
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD
進到熟悉的 Jenkins 設定介面!
[Synology Docker 套件運用] 用 GitLab + Jenkins 建立專屬你的 CI/CD

 

案例分享: 以 Line Bot 開發為例

 
近來學校實驗室接了一個產學合作的案子,內容涉及到 Line 聊天機器人的開發。

聊天機器人的開發並不難,部署流程卻很繁瑣。同時,實驗室的學弟妹對 git 的操作並還不夠熟悉,時常遇到聊天所需的 model 檔案太大推不上 github 的問題。

因此,藉這個機會架了一台實驗室專屬的 GitLab 伺服器,除了自主性較高,較不怕實驗室成員不小心開了 Public Repo 導致原始碼外洩,也可以提升 git push 的速度,更免除了許多免費 GitHub、GitLab 帳號的使用限制XD

因為這個聊天機器人的開發是多人協作的專案,因此我們使用 GitLab 協作並各自維護幾個重要的 branch,
平常快速在本地端測試的方式是用自己的電腦當伺服器 + ngrok 達到外部網址映射,

要推送程式碼更新時,則需要 git push 到 Git 伺服器後,再從遠端 Server 把程式碼 pull 下來,並且用新的程式碼重啟一次服務,

這樣的流程原先都是全人工手動下指令,
導致 code 只要改小小一行就要花幾分鐘的時間重新部署,
不僅會拖慢開發進度,也會讓人每次把 code push 上去都怕怕的,深怕服務會壞掉、又有 code 馬上要改等等,

導入 Jenkins 之後,整個開發流程則從 git push 開始,後面的部署流程全面自動化,若 code 的單元測試沒有通過,則不會部署到正式的 Line Bot 伺服器上,實驗室成員可以把 code 改好之後再重新提交,不再會產生服務因為更新而導致中斷或壞掉的問題。

 

結語 


許多人會說導入 CI/CD 的流程在於其工作哲學,而不是工具本身。然而,學習如何使用 CI/CD 的相關工具,並且在摸索的過程中思考如何利用它的功能優化自己的工作流程,也是一種學習 CI/CD 的方法。

本文敘述了如何運用 NAS 檔案存儲的優勢與 Docker 的支援,打造私有的 GitLab 與 Jenkins 服務,其實 GitLab 本身也有推出自家的 CI/CD 解決方案,今後也會繼續探索有些 Jenkins 現有的工作是否可以由 GitLab 取代,畢竟 GitLab 的設定流程似乎更加精簡且容易維護。

不過玩 Docker 好處就是不用什麼額外的成本,覺得對什麼服務有興趣就裝下來玩玩看 😆,從摸索的過程中再篩選出最適合自己的工具!
2021-03-11 19:03 發佈
推一個

導入CI/CD自動化部署之後真的回不去了

以往需要人工包版再手動部署到機器上真的太多變數

一個手殘或失誤就會導致網站/程式爆炸

當要退版還原時更是很恐怖的一件事

有了自動化部署後的穩定度真的好太多
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?