構建DevOps落地的自動化持續交付流水線的工具鏈
DevOps流程涉及到需求管理(包括需求的任務管理、進度管理等)、持續整合、版本管理、程式碼編譯、測試、配置管理和監控等多項工作任務。DevOps需要構建相應的工具鏈,將工作任務自動化,才能實現自動化的持續交付流水線。
在這條工具鏈上,有多種工具可供選擇,本文列舉了可實現各工作領域工作自動化的主流工具。
一、需求管理
需求是軟體的“源頭”,對需求的管理、跟蹤,也是對軟體專案的管理。典型的工具包括:
1、JIRA
澳大利亞Atlanssian公司的產品,支援任務管理、計劃管理、圖示報告。
2、Kanboard,看板工具。
將故事卡片進行視覺化,使用不同顏色區分不同型別的故事卡,將日常工作視覺化。
支援拖拽。
引入在製品概念,提供在製品WIP(Work In Process)列,通過設定WIP上限數量,暴露問題,解決問題,從而提升交付速率和質量。
3、Rally
有2個版本:
(1)社群版(Community Edition),基於敏捷和精益的專案管理模式。免費試用版提供10個使用者、5個專案同時使用。
(2)無限版(Unlimited Edition),基於雲平臺。15天試用,不限使用者數。
二、持續整合
1、Jenkins
實現軟體的自動化編譯、測試、部署。
引入Pipeline概念,實現了工作流即程式碼(Pipeline as Code)。
2、Bamboo
澳大利亞Atlanssian公司的產品,實現持續整合、持續部署、持續交付的工具。
30天試用版。
3、Travis CI
可無縫的構建、測試GitHub上的專案。
通過.travis.yml文字檔案實現工作流即程式碼(Pipeline as Code)的管理。
三、版本管理
版本是釋出的基石,所有與釋出相關的內容都需要版本管理。
1、Git
開源的分散式版本管理系統,基於資料設計儲存。
2、GitHub
基於Web的Git倉庫服務,是一箇中央協作平臺,當前託管了大量專案,可以使用GitHub進行開發、程式碼評審、bug跟蹤等。
提供網頁版的圖形介面和桌面整合。
3、GitLab
類似GitHub,同時提供Wiki知識庫功能和bug跟蹤功能。
4、Subversion
是Apache許可證下的集中式開源版本管理工具,包含了CVS所有的功能。
5、Mercurial
跨平臺的分散式版本管理系統,支援windows、Unix(FreeBSD、MacOS、Linux),使用Python語言開發。
四、編譯工具
1、Ant
實現軟體編譯過程自動化,最早用於2000年的Apache Tomcat專案開發。
使用Java語言開發。
無法簡便的支援頻繁修改依賴關係的專案。
2、Maven
意思是知識的累加器,最早用於Java專案的自動化構建,功能單一。
3、Gradle
是Android Studio內建的封裝部署工具,它改進了Ant 和Maven的缺點。
4、MSBuild
.NET框架下的構建工具,Visual Studio依賴MSBuild。使用Visual StudioIDE生成專案,MSBuild的專案檔案會自動生成。
五、配置管理
1、chef對公司的伺服器進行流水線式的任務配置和維護,能整合到主流雲平臺,如AWS、Open Stack、Azure。
2、Puppet
提供了一套標準的操作方式,實現軟體的交付和維護
支援Unix和Window
3、Ansible
集成了多節點部署、執行ad hoc任務、配置管理功能
特別適合叢集管理的機器。
被Redhat收購後,商業版Ansible Tower可以進行自動擴容、管理複雜的部署操作,工作流可以將配置的步驟視覺化展示出來。
六、測試
1、Junit
針對Java程式碼級的單元測試工具
2、Selenium
支援多語言的測試指令碼:Java、C#、Groovy、Perl、PHP、Python、Rubby
基於UI的測試,支援多種瀏覽器
支援移動應用測試,通過驅動,可以對Android 、IOS的UI進行測試
3、Cucumber
自動化驗收測試,使用者行為驅動開發模式(BDD)的測試工具。採用Given-When-then的格式建立一個.feature檔案,包含給定的執行條件,Cucumber執行這個檔案即完成一個測試用例。
測試用例的執行報告可以通過Junit的Junitreport模組生成。
4、FitNesse
自動化驗收測試+web伺服器+wiki,需求可以直接通過web瀏覽器的方式建立和修改,即wiki。在FitNesse裡建立的需求,可以被FitNesse自動執行。
七、監控
1、Nagios
監控網路、系統、基礎架構(主機、磁碟、程序)、節點
2、Zabbix
企業級健康,可監控上萬臺伺服器、虛擬機器的效能和狀態。