正如標題所述,一套持續整合工具在整個CICD Pipeline中,就像是一個指揮家的角色。到底甚麼時候要處理甚麼事情,進行甚麼步驟,基本上都會交由持續整合工具去決定執行的時機及內容。
以下是以我個人經驗設計的持續整合過程簡介。因應不同的情況,大家在設計自己的CICD Pipeline可以因應需求而增減相應的階段。
一般來說,持續整合工具會定義了整合的觸發時機。例如當某一個分支有合併發生、或是新增了一個新的發佈標籤時,持續整合工具就會從版本管理系統取得相關的程式碼進行下一個動作。
然後,相關的程式碼會進行一些基本的測試。例如檢查發的程式是否合乎相關開發語言的標準(Coding Standard),又或者是程式中是否有漏洞(Vulnerabilities)。如果檢查時發現程式未能合符發佈的要求時,整合工具可以中止相關的發佈動作。
如果成功通過了自動化的測試後,相關的程式會被打包成為可以被引用的套件,或者是可運行的Docker Image等,並上載到儲存倉庫中,以便日後利用。
另外有一些自動化測試項目,例如合約測試或是架構測試,可能要打包後才可以進行測試。此時就可以再次對其進行相關的測試,並因應測試的結果決定中止或是繼續。
最後,就是持續交付/持續部署的流程。一般我都會在這個時候在整合工具中加入一個批准的流程。當項目經理或者是技術主任批准了部署後,整個項目就會自動部署到生產環境中。
所以一個整合工具就是一個指揮者,決定了所有事情發生的時機。而作為CICD Pipeline的開發者,要做的就是設計出合適的自動化流程,讓整合工具可以演奏出美妙的樂章。
隨著科技日新月異,市面上亦都越來越多不同的持續整合產品。甚至乎各個不同的雲端平台,都會有自己的整合工具提供,方便開發人員可以更輕鬆的在相關的平台進行部署。
而除了雲端平台提供的整合工具外,版本管理工具例如GitLab等,亦是市面上比較多人使用的整合工具之一。它的好處是把整合工具跟版本管理放到同一套工具中,在管理上會更加方便。而缺點亦因為整合了版本管理系統的關係,如果有需要使用多套版本管理系統時,可能在整合上會增加了操作及整合上的繁複性。而且某些插件,例如GitLab CI/CD for GitHub整合插件需要訂閱Premium以上版本才可以使用。
因此,在有預算限制的情況下,我會推薦大家使用開源整合工具中的老大哥 – Jenkins。
使用Jenkins有很多優勢。第一當然是本系列的重點,開源而且免費。
而另外一點,Jenkins是整合工具中一套比較長青的產品。由於使用Jenkins的開發者眾多,整個開發社區就會顯得比較活躍。所以在Jenkins的插件生態中,有多達1500個以上的插件,所以開發者很容易就可以找到適合使用的插件。
另外,Jenkins以分散式架構運作。當有大量的專項需要進行整合時,可以分配到不同的機器上去進行運作,加快整合的速度。因此面對企業成長,自動化的需求增加時,亦不用擔心Jenkins的支援問題。
在使用方面,Jenkins的學習曲線相對平坦。而且由於開發人員比較多、產品歷史悠久,以及相關的文檔比較齊全的關係,初入門的小伙伴所以很容易就可以找到自己需要的資料及幫忙。
持續整合工具的款式眾多,恕我未能每一個產品仔細向大家講解。但其實每一套整合工具的概念其實分別不大,只要事先深入理解了其中一套產品後,接手另一套產品時就會輕鬆得多。所以接下來的兩天,我會跟大家一起安裝及使用Jenkins這一套工具。希望大家了解了Jenkins後,可以學習到持續整合工具的核心概念吧!
終於進入了整合工具的部份,這幾天打文章打到手軟。看別的參加者好像很輕鬆簡單,自己嘗試一下才發覺,其實一點也不容易啊!但每次疲累時,想到如果我的文章,也許能夠對世界進步有那麼一丁點的幫助,好像又可以堅持下去了。我會努力的!