隨著 Agile 以及 DevOps 的精神越來越普及,持續整合伺服器(Continuous Integration Server)的重要性也越來越被大家所重視,在團隊開發協作中,擅用持續整合伺服器可以大幅度減輕團隊成員的日常手動作業,讓團隊成員擁有更多的時間可以專注再開發,甚至可以作為團隊的守護者,讓程式碼維持在高品質的狀態,讓團隊的開發工作更加的省時順暢。
為什麼團隊需要持續整合伺服器?
我相信開發人員在剛加入一個新的團隊時,或多或少都遇過這樣的狀況,明明已經有版本控制系統,也有把程式碼簽入到共用的伺服器中,但如果在一個全新的環境把程式碼拉下來,卻發現程式碼無法建置。或是團隊在發行和部署新版本時,都必須委由專門的團隊或人員來進行,一但該團隊工作量無法負荷或是人員休假時,就會沒辦法進行更版。更不用說是簽入的程式碼本身有問題,沒有辦法通過測試,或是新撰寫的程式碼沒有符合團隊開發規範等等情況發生了。
持續整合伺服器,顧名思義就是持續不斷的進行整合的工作。隨著程式碼的簽入,讓需要執行的測試、程式碼檢查、部署等工作隨著簽入而發生,不需要任何人工的介入,並且能夠在程式碼有問題時自動通知,讓簽入的程式碼隨時保持在高品質、可用的狀態。
我們可以把持續整合伺服器想像成一個專屬於團隊的虛擬管家,不管今天是需要執行自動化測試,還是想要對程式碼進行安全性掃描,甚至是想要把新版本的程式碼更新到正式環境之中,都可以放心的交給持續整合伺服器去進行,它是全自動的,不需要工程師手動進行任何的動作,只需要和平常一樣把程式碼簽入到版本控制系統之中,它就會自動的幫你處理完剩下該做的工作,大大節省工程師的時間,並透過自動化重複執行,避免一些人工作業的錯誤發生。
對於團隊而言,有了持續整合伺服器最大的改變,是可以省下大量的時間,更可以讓開發人員專注在開發工作上,不需要每天都花時間進行同樣的工作。舉個例子來說,如果一個開發人員,平均一天要花半個小時的時間,在執行自動化測試或是更新程式到測試、正式伺服器,那麼使用持續整合伺服器之後,一個月就省下 15 個小時,幾乎相當於多了兩天的生產時間,更不用提因為做這些事情而被打斷的開發工作,需要工程師花多少時間來重新進入開發的狀態了!
使用持續整合伺服器對我們有什麼好處?
使用持續整合伺服器可以讓工程師更專注在開發工作上,不會因為要進行週期性工作而打斷開發,可以完完全全的交給自動化工具去執行。而對於專案的管理人員來說,透過持續整合伺服器所提供的報表功能,更能夠輕鬆的掌握專案的執行狀況,甚至是注意到目前的軟體品質是否良好,避免過多的技術債導致軟體品質失調。
使用持續整合伺服器可以幫助我們:
- 完全的自動化,第一次設定好之後就不需要再管它
- Web介面,只要透過瀏覽器可以隨時操作瀏覽
- 不需重新適應流程,完全依照既有的開發步驟,導入不會打亂習慣的節奏
- 提高專案開發透明度,軟體成員和管理者可以透過報表輕鬆掌握目前軟體的狀況
- 養成良好的開發習慣 (版本控制、單元測試以及統一的程式碼風格)
- 提早發現潛在的風險 (程式碼複雜度、安全性)
- 保持軟體穩定,有更改就測試,建置異常馬上發出通知給團隊成員,不怕改壞程式
隨著持續整合伺服器的導入,除了專案各個維度的數據可以一目了然,最大的好處就是不用擔心因為不小心簽入的錯誤程式碼而導致系統異常,透過單元測試或是自動化測試可以讓我們在部署之前就攔截很多潛在的問題,大幅度增加大家對於軟體的信心,也可以慢慢培養團隊良好的開發習慣,重點是這些好處不需要花費太多的時間,只需要在一開始設定持續整合伺服器之後,就可以持續的享受這些好處,幫助大家打造高品質的軟體。
使用 Jenkins 作為持續整合伺服器?
對於現在的開發人員來說,其實持續整合伺服器的選擇十分的多,那為什麼我還會選擇使用 Jenkins 作為主要的持續整合伺服器呢?最主要的原因就是因為 Jenkins 具有相當廣泛的使用者以及大量的擴充功能支援,以及相當大的自由度來滿足工作上的各種需求。由於 Jenkins 是一個開發已久的持續整合伺服器,所以只要聽過持續整合概念的工程師,幾乎都知道 Jenkins 是做什麼用的,而廣泛的使用者群也代表著 Jenkins 具備有足夠的功能來滿足使用者的需求,各種想像得到的功能幾乎都能在 Jenkins 上找到對應的 Plugin(不管是最簡單的第三方登入功能整合,到最新最潮的 Kubernetes,Jenkins 都有對應的 Plugin 支援),相較於一些比較新的持續整合伺服器而言,或許提供的功能沒有那麼華麗而相對樸實,但能做到的事情卻一點也不含糊,甚至在彈性和可客制化方面還贏過目前大部分的持續整合伺服器!
Jenkins 是一個極具彈性的持續整合伺服器,我可以很輕鬆的在 Jenkins 上建置各平台和各種開發語言的應用程式,並且 Jenkins 也持續在推成出新,在Jenkins 2.0 版本之後,甚至還推出了 Jenkins Pipeline,讓以往比較困難的建置設定,可以使用類似 DSL 的方式來進行宣告設定,讓專案的建置工作和環境管理更加的輕鬆!由於 Jenkins 本身就是一個 Open Source 專案,如果有任何的問題或需求,可以方便開發人員直接追蹤原始碼查找問題,甚至是自己撰寫擴充功能,這也是為什麼到今天我還會使用 Jenkins 作為導入持續整合伺服器的選擇!
我的 Jenkins 課程正在籌備中
這次剛好有機會,接受 YOTTA 的邀請,一起合作開設「DevOps線上課程」,這堂課程會教大家使用Jenkins 設定及自動化建置部署,如何加入測試為系統品質把關,與使用 Jenkins Pipeline 控管軟體開發生命週期,並輔助工程團隊能更專注在開發與維運的整合等相關內容。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
現在這項課程正在進行課前意見收集,歡迎大家幫忙填寫課前調查問卷,告訴我們你的學習想法,如果開課就送 $100 課程折價券,還有機會免費獲得這堂線上課程喔!
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
▲ 活動獎項:「使用Jenkins打造DevOps團隊」線上課程,共抽3名
▲ 活動時間:即日起~2018/1/21(日)
▲ 得獎名單公布:2018/1/23(二)公布於YOTTA - 你最專業的學習夥伴粉絲團
▲備註:如課程因故無法開設,恕不另行補償其他贈品