1. 程式人生 > >DevOps基礎-5.5-持續交付:你的CI工具鏈

DevOps基礎-5.5-持續交付:你的CI工具鏈

歡迎回來。在這一篇文章我們將談論工具。每個組織和團隊的持續交付流水線(Pipeline)是不同的。管道的概念是一系列階段(Stage),每個階段都由特定工具支援。讓我們看看持續交付的六個關鍵階段以及與之相關的工具。關鍵領域是:版本控制,CI系統,構建,測試,您需要一個工件儲存庫和部署。

       版本控制是我們提交程式碼更改的地方,可以檢視所有更改的完整歷史記錄。它允許開發人員通過將每個更改視為程式碼中的獨立層來保持彼此同步。今天大多陣列織選擇以GitHub或BitBucket的形式使用Git作為SAS或有時作為本地企業版本。這些增加了社交媒體中常見的協作和共享優勢。你可以把它想象成Facebook滿足版本控制。好吧,接下來就是持續整合

        作為開源的Jenkins在許多組織中很受歡迎。它的UI確實很low,但它有大量的社群支援,幾乎每個軟體提供商都與它整合。還有來自CloudBees的商業產品。其他CI系統選項包括GoCD,Bamboo和TeamCity。Travis CI或Circle CI等公司也採用了大量持續整合作為服務。好了,現在讓我們談談構建工具。構建工具非常依賴於語言。

        如果你正在使用Ruby,你可能會簡單地使用Make或Rake,但這些只是每次執行一組一致的步驟。或者您可以採用Maven的工作流方法,這可以讓您從開發人員桌面執行可重複的構建和測試,一直到CI系統。如果你正在對前端程式碼進行測試,那麼使用Gulp真的很受歡迎。而且,如果你正在建設基礎設施,比如HashiCorp的Packer。 大多數開發語言都內建了單元測試,或者社群強烈推薦使用JUnit for Java等。

       使用短接和格式化的程式碼規範也是如此。種類連結golang。有golint或gofmt。或者也許使用Ruby,有一個名為RuboCop的版本。 整合測試通常使用測試驅動的框架或使用內部指令碼執行。該領域的測試框架和工具包括Robot,Protractor和Cucumber。關於這些的很酷的事情是它們讓你表達了程式碼的外部方法。  他們可以掛鉤到Selenium進行UI測試,或者你可以自己使用Selenium。

       如果您最終對前端進行了大量的驗收測試,那麼您可以使用名為Sauce Labs的SAS產品。假設您正在進行基礎設施測試。您可能正在使用Kitchen CI for Chef等工具。這實際上建立了新例項並執行程式碼的完全融合以進行測試。像ApacheBench或Jmeter這樣的工具可以幫助您進行效能測試

。你還需要在那裡新增一些安全測試。 Galen和Mitten是兩種開源外部測試工具。還有一些工具可以像開源工具Brakeman一樣進行程式碼檢查,也可以從像Veracode這樣的公司提供付費產品。

        這些測試最重要的屬性之一是您能夠在check in之前在開發的機器上執行它們,而不僅僅依賴於CI管道。 Vagrant,Otto和Docker Compose等工具允許您在本地部署和執行整個應用程式。因此,您不僅可以隨時執行單元測試,還可以執行整合和驗收測試。一旦你的程式碼被構建和測試,工件必須去某個地方(工件倉庫)。像Artifactory或其開源等效的Nexus等熱門解決方案管理著許多不同的工件格式。

        或者可以將特定輸出(如Docker映象)傳送到Docker Hub或內部docker伺服器。你知道Ernest,我之前用過的一個選項,就是讓你的構建系統標記工件並將其上傳到Amazon S3。這反過來又建立了一個最小的,可行的工件庫。但它絕對有效。最後,我們進行部署。 Rundeck是一個很好的工作流驅動的部署選項。它允許您定義作業,經常在其周圍放置許可權,然後在整個系統中自動化工作流。

       部署是一種流行的工作流程,人們使用它來實現自動化。 有些人使用他們的配置管理工具進行應用程式部署,或者其他人只編寫他們自己的自定義工具。有些人使用UrbanCode和ThoughtWorks等人的商業工具。有一個來自Etsy的開源產品,它叫做Deployinator。它提供了一個儀表板,可讓您執行自己的部署工作流程。 這個領域的工具變化很大。就像我們之前說的那樣,沒有人擁有完全相同的連續交付管道,這沒關係。

       你知道,當我為不同的地方建造管道時,我試著想一想我在這裡建造的最簡單的東西是什麼? 我問,我試著真正關注的問題; 這部分管道的最低可行產品是什麼請記住,任何不直接為您正在處理的產品增加價值的東西都是浪費。 過度投資您的CI管道,超出您的產品需求,需要時刻考慮投入產出比。

PS:這裡以我個人工作經驗,強調一點,管道或者翻譯流水線,還是英文的pipeline最舒服。不管CI還是CD,在Jenkins上許許多多構建job,都是使用Pipeline來寫程式碼實現串聯起來。如果要寫pipeline,那就要會Groovy語言,是Java的一種指令碼語言。一個pipeline檔案,也叫Jenkinsfile,裡面是由許多階段(關鍵字是stage)來定義的。一個stage下可以定義step。以後,是很有必要,來開一個Pipeline系列文章,來學習Jenkins的高階部分,我部落格已經有jenkins的基礎入門部分。