iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
DevOps

後端功城獅30天DevOps探討挑戰系列 第 11

Continuous Integration 持續整合

What is CI?

Continuous Integration 持續整合,簡稱CI,我覺得是一種概念,也是一種流程上,主打建議一天應該整合超過一次,以及對應處理當整合時遇到的問題與狀況,確保頻繁合併的產出完整,因此通常會搭配自動化測試(後面的章節會再探討Testing)

一般我們在開發不論是產品還是專案,我們都會使用版本控制,常見的有SVN、Git、TFVC.....,這樣可以方便多人同時開發,基本上是必備軟體,因此鄉民們有一說:「如果該公司沒做版控,不要去 / 快淘R~」,其實版控在持續整合的目標上,是很關鍵的輔助作業。

當開發需求切細並模組化,可以交付多位工程師同時開發,或是分群分組負責,因應每次的需求分支程式碼,待開發完成後再合併至主程式,每次合併時都難免會遇到一些衝突需要解決,但是若分支分離的時間越長,修改內容差異越大,就會在合併時遇到越嚴重的衝突,分之儼然成為一條新的主線,此時就是俗稱的整合地獄,為了脫離十八層,花的時間可能多更多更多....

為了要避免進入地獄,需要縮短分支獨立的時間,也就是加快開發合併的時間,但是效率再高,還是有其極值,因此縮小每次調整的範圍,也是很重要的地方,咦?這句話是不是好像在哪裡看過?You are right!這跟敏捷是相輔相成的,但CI更專注的地方是,當提高每日的合併次數時,會面臨到對應的作業調整,例如要搭配自動化測試,包含單元測試與整合測試,以顧全整合後的結果完整,如何在這樣的流程上能減少重工與成本

https://ithelp.ithome.com.tw/upload/images/20190927/20111916KERCFdxdWY.png
圖片來源:Continuous Integration vs. Continuous Delivery vs. Continuous Deployment

上面的說明,其實已經講完了CI的目的了,但我知道很多人會跟我第一次看的時候一樣,Hmmm.....我好像有懂噢!但應該不是很懂XD
那如果條列出來,應該會比較清楚一些了!

  • 目的
    • 維持隨時有一版可以部署的程式碼版本
    • 減少人工的複雜流程
    • 降低風險、穩定品質
    • 增加團隊信心
    • 提高系統透明度
  • 特色
    • 自動化:包含測試、建置
    • 頻繁且持續:是長期執行的流程且至少每日會有一版簽入
    • 品質穩定:Code會有既定規則、測試也會每次都需跑過
    • 更快地發現錯誤:因有自動化測試,且頻繁簽入頻繁測試,能更早發現問題

How to do CI?

再來,探討完CI是什麼了,我們要來看看要怎麼做到CI,主要是分為人為和系統化

  • 人為:團隊成員該做的事
    • 頻繁簽入簽出程式碼
    • 不得簽入未完成的、未測試的、不行建置的有問題的程式碼
    • 簽入程式碼後,須於CI Server自動化建置、測試都成功完成,才得以離開
    • 當簽出程式碼時,須於自己的本機跑完所有測試,亦須成功
  • 系統化:建立CI Server輔助,其主要作業有
    • 監控主程式碼,確認是否有異動或簽入
    • 若發現有異動或簽入,需自動化作業,建置程式並執行測試
    • 若建置與測試完成,釋出可發佈的版本的程式碼
    • 當有新可發佈的程式碼版本釋出,會通知團隊成員
    • 若建置或測試有失敗時,會通知團隊成員
      https://ithelp.ithome.com.tw/upload/images/20190927/201119160IiEYICT3g.jpg
      圖片來源:How Continuous Integration Works With CI Systems

參考資料、延伸閱讀:

下集預告:Continuous Delivery


上一篇
Why & How DevOps?
下一篇
Continuous Delivery 持續交付
系列文
後端功城獅30天DevOps探討挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言