初學者指南:建立 DevOps 管道

如果您是 DevOps 新手,請查看此建立第一個管道的五步驟指南。

初學者指南:建立 DevOps 管道

DevOps 已成為修復緩慢、脫節或損壞的軟體開發流程的標準解決方案。 問題是,如果您是 DevOps 新手並且不知道從哪裡開始,您可能缺乏對這些技術的理解。 本文將討論 DevOps 管道的定義,並將提供創建 DevOps 管道的五個步驟說明。 雖然本教程並不詳盡,但它應該為您開始您的旅程並在未來擴展您的知識奠定基礎。 但讓我們從歷史開始。

我的 DevOps 之旅

我之前曾在花旗集團雲端團隊工作,開發基礎設施即服務(IaaS) Web 應用程式來管理花旗的雲端基礎設施,但我一直對如何提高開發流程的效率並為企業帶來積極的文化變革感興趣。開發團隊。 我在花旗雲端架構和基礎架構首席技術長 Greg Lavender 推薦的一本書中找到了答案。 這本書的名字叫《鳳凰計畫》(鳳凰計劃),並且解釋了 DevOps 的原理,但讀起來就像一本小說。

書後的表格顯示了不同公司在發布環境中部署其係統的頻率:

亞馬遜:每天 23 個
Google:每天 5
Netflix:每天 500
臉書:每天一次
推特:每週3次
典型公司:每 9 個月一次

亞馬遜、谷歌和 Netflix 的頻率怎麼可能? 這是因為這些公司已經弄清楚如何創造近乎完美的 DevOps 管道。

在我們在花旗實施 DevOps 之前,我們離這個目標還很遠。 當時,我的團隊有不同的環境,但開發伺服器上的部署完全是手動的。 所有開發人員只能存取一台基於 IBM WebSphere Application Server Community Edition 的開發伺服器。 問題是,每當多個用戶嘗試同時部署時,伺服器就會關閉,因此開發人員必須相互傳達他們的意圖,這是相當痛苦的。 此外,還存在低階測試程式碼覆蓋率、繁瑣的手動部署流程以及無法追蹤與特定任務或使用者故事相關的程式碼部署等問題。

我意識到需要做點什麼,並找到了一位志同道合的同事。 我們決定合作建立最初的 DevOps 管道 - 他設定了 Tomcat 虛擬機器和應用程式伺服器,而我則負責 Jenkins、整合 Atlassian Jira 和 BitBucket,並負責測試程式碼覆蓋率。 這個副專案非常成功:我們幾乎完全自動化了許多流程,在我們的開發伺服器上實現了幾乎100% 的正常運行時間,提供了追蹤並改進了程式碼的測試覆蓋率,並添加了將Git 分支連結到Jira 問題或部署的功能。 我們用於建立 DevOps 管道的大多數工具都是開源的。

現在我明白了我們的 DevOps 管道有多簡單:我們沒有使用 Jenkins 檔案或 Ansible 等擴充功能。 然而,這個簡單的管道運作良好,可能是由於帕累托原則(也稱為 80/20 規則)。

DevOps 和 CI/CD 管道簡介

如果您問幾個人“什麼是 DevOps?”,您可能會得到幾個不同的答案。 DevOps 與敏捷一樣,已經發展到跨越許多不同的學科,但大多數人都會同意以下幾點:DevOps 是一種軟體開發實踐或軟體開發生命週期(SDLC),其中心宗旨是改變開發人員和非開發人員所處的文化。開發人員所處的環境是:

先前手動執行的操作已實現自動化;
每個人都做自己最擅長的事;
在一定期間內實施次數增加; 吞吐量增加;
提高開發彈性。

雖然擁有正確的軟體工具並不是創建 DevOps 環境所需的唯一東西,但有些工具是必不可少的。 一個關鍵工具是持續整合和持續部署(CI/CD)。 在這個管道中,環境有不同的階段(例如DEV、INT、TST、QA、UAT、STG、PROD),許多操作都是自動化的,開發人員可以編寫高品質的程式碼,實現開發敏捷性和高部署率。

本文介紹了使用開源工具建立 DevOps 管道(如下圖所示)的五步驟方法。

第 1 步:CI/CD 方法

您首先需要的是 CI/CD 工具。 Jenkins 是一款基於 Java 並獲得 MIT 許可的開源工具,是普及 DevOps 並成為事實上的標準的工具。

那麼詹金斯是什麼? 將其視為某種神奇的通用遙控器,可以與各種服務和工具進行通訊並組織各種服務和工具。 就其本身而言,像 Jenkins 這樣的 CI/CD 工具是無用的,但當它連接到不同的工具和服務時,它會變得更加強大。

Jenkins 只是可用於建立 DevOps 管道的眾多開源 CI/CD 工具之一。

詹金斯:知識共享和麻省理工學院
崔維斯 CI:麻省理工學院
巡航控制:BSD
建構機器人:GPL
阿帕契阿甘:阿帕契 2.0
卡比:GNU

使用 CI/CD 工具的 DevOps 流程如下所示:

初學者指南:建立 DevOps 管道

您的本地主機上運行著一個 CI/CD 工具,但目前您無能為力。 讓我們進入 DevOps 之旅的下一階段。

第 2 步:管理原始碼控制系統

驗證 CI/CD 工具能否發揮其魔力的最佳(也許是最簡單)方法是與原始碼控制 (SCM) 工具整合。 為什麼需要原始碼控制? 假設您正在開發一個應用程式。 每當您建立應用程式時,您都在編程,無論您使用 Java、Python、C++、Go、Ruby、JavaScript 還是無數種程式語言中的任何一種,都沒關係。 您編寫的程式碼稱為原始程式碼。 一開始,尤其是當您獨自工作時,將所有內容都放在本機目錄中可能是可以的。 但隨著專案變得越來越大並且您邀請其他人進行協作,您需要一種方法來防止衝突,同時有效地共享修改。 您還需要一種方法來還原先前的版本,因為建立備份和複製/貼上到它們已經過時了。 你(和你的隊友)需要更好的東西。

這就是原始碼控制幾乎成為必需的地方。 該工具將您的程式碼儲存在儲存庫中、追蹤版本並協調專案參與者的工作。

雖然有許多原始碼控制工具,但 Git 是標準,這是理所當然的。 我強烈建議使用 Git,但如果您願意,還有其他開源選項。

Git:GPLv2 和 LGPL v2.1
顛覆:阿帕契2.0
並發版本系統 (CVS):GNU
灶神星:LGPL
Mercurial:GNU GPL v2+

這就是增加了原始碼控制的 DevOps 管道的樣子。

初學者指南:建立 DevOps 管道

CI/CD 工具可以自動化審查、原始碼取得和成員之間協作的過程。 不錯? 但如何將其變成一個可用的應用程序,以便數十億人可以使用和欣賞它?

第 3 步:建立建置自動化工具

偉大的! 您可以審查程式碼並對原始程式碼管理進行更改,並邀請您的朋友協作開發。 但您還沒有創建應用程式。 要製作 Web 應用程序,必須將其編譯並打包為可部署的批次格式或作為可執行檔執行。 (請注意,解釋型程式語言(例如 JavaScript 或 PHP)不需要編譯)。

使用建置自動化工具。 無論您決定使用哪種建置自動化工具,它們都有相同的目標:將原始程式碼建置為某種所需的格式,並自動執行清理、編譯、測試和部署到特定環境的任務。 建置工具會根據您的程式語言而有所不同,但這裡有一些常見的開源選項。

名稱
許可證
程式設計語言

Maven的
阿帕奇2.0
Java的

螞蟻
阿帕奇2.0
Java的

搖籃
阿帕奇2.0
Java的

巴澤爾
阿帕奇2.0
Java的

使
GNU
N / A

咕嚕
麻省理工學院
JavaScript的


麻省理工學院
JavaScript的

建造者
阿帕奇
紅寶石


麻省理工學院
紅寶石

美國AP協會
GNU
蟒蛇

SCCons
麻省理工學院
蟒蛇

比特烘焙
GPLv2
蟒蛇

蛋糕
麻省理工學院
C#

自衛隊
外籍人士(麻省理工學院)
LISP

完成
BSD
哈斯克爾

偉大的! 您可以將建置自動化工具設定檔放入原始碼控制系統中,並讓 CI/CD 工具將所有內容放在一起。

初學者指南:建立 DevOps 管道

一切都很好,不是嗎? 但是在哪裡部署您的應用程式呢?

第 4 步:Web 應用程式伺服器

現在,您已經有了一個可執行或可安裝的打包檔。 對於任何真正有用的應用程序,它必須提供某種服務或接口,但您需要一個容器來託管您的應用程式。

Web應用伺服器就是這樣一個容器。 伺服器提供了一個可以定義正在部署的套件的邏輯的環境。 伺服器還提供接口,並透過向外界公開套接字來提供 Web 服務。 您需要一個 HTTP 伺服器,以及一些環境(如虛擬機器)來安裝它。 現在,我們假設您將了解更多相關內容(儘管我將在下面介紹容器)。

有多種開源 Web 應用程式伺服器。

名稱
許可證
程式設計語言

Tomcat的
阿帕奇2.0
Java的

碼頭
阿帕奇2.0
Java的

WildFly
GNU 小公共
Java的

玻璃魚
CDDL 和 GNU 較少公開
Java的

Django的
3 條款 BSD
蟒蛇

龍捲風
阿帕奇2.0
蟒蛇

獨角獸
麻省理工學院
蟒蛇

蟒蛇
麻省理工學院
蟒蛇

Rails的
麻省理工學院
紅寶石

Node.js的
麻省理工學院
使用Javascript

您的 DevOps 管道幾乎可以使用了。 好工作!

初學者指南:建立 DevOps 管道

雖然您可以停下來自行處理集成,但程式碼品質是應用程式開發人員需要擔心的重要問題。

第 5 步:程式碼測試覆蓋率

實施測試可能是另一個繁瑣的要求,但開發人員必須儘早發現應用程式中的任何錯誤並提高程式碼品質以確保最終用戶滿意。 幸運的是,有許多開源工具可用於測試程式碼並提出提高其品質的建議。 更好的是,大多數 CI/CD 工具可以連接到這些工具並使流程自動化。

程式碼測試由兩部分組成:幫助您編寫和執行測試的程式碼測試框架,以及幫助您提高程式碼品質的建議工具。

程式碼測試系統

名稱
許可證
程式設計語言

JUnit的
Eclipse公共許可證
Java的

易模擬
阿帕奇
Java的

莫基托
麻省理工學院
Java的

電源模擬
阿帕奇2.0
Java的

pytest
麻省理工學院
蟒蛇

假設
Mozilla的
蟒蛇

弓形體
麻省理工學院
蟒蛇

用於程式碼改進的推薦系統

名稱
許可證
程式設計語言

的Cobertura
GNU
Java的

代碼覆蓋
Eclipse 公共 (EPL)
Java的

覆蓋率.py
阿帕奇2.0
蟒蛇

艾瑪
通用公共許可證
Java的

可可
Eclipse公共許可證
Java的

假設
Mozilla的
蟒蛇

弓形體
麻省理工學院
蟒蛇

茉莉花
麻省理工學院
JavaScript的

因果報應
麻省理工學院
JavaScript的

摩卡色
麻省理工學院
JavaScript的


麻省理工學院
JavaScript的

請注意,上面提到的大多數工具和框架都是為 Java、Python 和 JavaScript 編寫的,因為 C++ 和 C# 是專有程式語言(儘管 GCC 是開源的)。

現在您已經實現了測試覆蓋率工具,您的 DevOps 管道應該類似於本教學開頭所示的圖表。

附加步驟

集裝箱

正如我所說,您可以將伺服器託管在虛擬機器或伺服器上,但容器是一種流行的解決方案。

什麼是容器? 簡而言之,虛擬機器需要大量的作業系統內存,超過應用程式的大小,而容器只需要少量的庫和配置來運行應用程式。 顯然,虛擬機器仍然有重要的用途,但容器是託管應用程式(包括應用程式伺服器)的輕量級解決方案。

雖然還有其他容器選項,但最受歡迎的是 Docker 和 Kubernetes。

碼頭工人:阿帕契2.0
Kubernetes:阿帕契 2.0

中級自動化工具

我們的 DevOps 管道主要專注於協作應用程式創建和部署,但使用 DevOps 工具還可以完成許多其他事情。 其中之一是使用基礎設施即程式碼(IaC)工具,也稱為中介軟體自動化工具。 這些工具有助於自動化中間件的安裝、管理和其他任務。 例如,自動化工具可以使用正確的配置來提取 Web 應用程式伺服器、資料庫和監控工具等應用程序,並將它們部署到應用程式伺服器。

以下是一些開源中間件自動化工具:

Ansible:GNU 公共
SaltStack:Apache 2.0
廚師:阿帕契2.0
傀儡:Apache 或 GPL

初學者指南:建立 DevOps 管道

了解如何透過參加 SkillFactory 的付費線上課程從頭開始獲得受歡迎的職業或在技能和薪水方面升級:

更多課程

useful

來源: www.habr.com

添加評論