偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用開(kāi)源工具構(gòu)建DevOps流水線的初學(xué)者指南

開(kāi)源
如果你是 DevOps 新人,請(qǐng)查看這 5 個(gè)步驟來(lái)構(gòu)建你的第一個(gè) DevOps 流水線。

[[281557]]

如果你是 DevOps 新人,請(qǐng)查看這 5 個(gè)步驟來(lái)構(gòu)建你的第一個(gè) DevOps 流水線。

DevOps 已經(jīng)成為解決軟件開(kāi)發(fā)過(guò)程中出現(xiàn)的緩慢、孤立或者其他故障的默認(rèn)方式。但是當(dāng)你剛接觸 DevOps 并且不確定從哪開(kāi)始時(shí),就意義不大了。本文探索了什么是 DevOps 流水線并且提供了創(chuàng)建它的 5 個(gè)步驟。盡管這個(gè)教程并不全面,但可以給你以后上手和擴(kuò)展打下基礎(chǔ)。首先,插入一個(gè)小故事。

我的 DevOps 之旅

我曾經(jīng)在花旗集團(tuán)的云小組工作,開(kāi)發(fā)Infrastructure as a Service基礎(chǔ)設(shè)施即服務(wù)網(wǎng)頁(yè)應(yīng)用來(lái)管理花旗的云基礎(chǔ)設(shè)施,但我經(jīng)常對(duì)研究如何讓開(kāi)發(fā)流水線更加高效以及如何帶給團(tuán)隊(duì)積極的文化感興趣。我在 Greg Lavender 推薦的書(shū)中找到了答案。Greg Lavender 是花旗的云架構(gòu)和基礎(chǔ)設(shè)施工程(即 Phoenix 項(xiàng)目)的 CTO。這本書(shū)盡管解釋的是 DevOps 原理,但它讀起來(lái)像一本小說(shuō)。

書(shū)后面的一張表展示了不同公司部署在發(fā)布環(huán)境上的頻率:

公司 部署頻率
Amazon 23,000 次/天
Google 5,500 次/天
Netflix 500 次/天
Facebook 1 次/天
Twitter 3 次/周
典型企業(yè) 1 次/9 個(gè)月

Amazon、Google、Netflix 怎么能做到如此之頻繁?那是因?yàn)檫@些公司弄清楚了如何去實(shí)現(xiàn)一個(gè)近乎完美的 DevOps 流水線。

但在花旗實(shí)施 DevOps 之前,情況并非如此。那時(shí)候,我的團(tuán)隊(duì)擁有不同構(gòu)建階段stage的環(huán)境,但是在開(kāi)發(fā)服務(wù)器上的部署非常手工。所有的開(kāi)發(fā)人員都只能訪問(wèn)一個(gè)基于 IBM WebSphere Application 社區(qū)版的開(kāi)發(fā)環(huán)境服務(wù)器。問(wèn)題是當(dāng)多個(gè)用戶同時(shí)嘗試部署時(shí),服務(wù)器就會(huì)宕機(jī),因此開(kāi)發(fā)人員在部署時(shí)就得互相通知,這一點(diǎn)相當(dāng)痛苦。此外,還存在代碼測(cè)試覆蓋率低、手動(dòng)部署過(guò)程繁瑣以及無(wú)法根據(jù)定義的任務(wù)或用戶需求跟蹤代碼部署的問(wèn)題。

我意識(shí)到必須做些事情,同時(shí)也找到了一個(gè)有同樣感受的同事。我們決定合作去構(gòu)建一個(gè)初始的 DevOps 流水線 —— 他設(shè)置了一個(gè)虛擬機(jī)和一個(gè) Tomcat 服務(wù)器,而我則架設(shè)了 Jenkins,集成了 Atlassian Jira、BitBucket 和代碼覆蓋率測(cè)試。這個(gè)業(yè)余項(xiàng)目非常成功:我們近乎全自動(dòng)化了開(kāi)發(fā)流水線,并在開(kāi)發(fā)服務(wù)器上實(shí)現(xiàn)了幾乎 100% 的正常運(yùn)行,我們可以追蹤并改進(jìn)代碼覆蓋率測(cè)試,并且 Git 分支能夠與部署任務(wù)和 jira 任務(wù)關(guān)聯(lián)在一起。此外,大多數(shù)用來(lái)構(gòu)建 DevOps 所使用的工具都是開(kāi)源的。

現(xiàn)在我意識(shí)到了我們的 DevOps 流水線是多么的原始,因?yàn)槲覀儧](méi)有利用像 Jenkins 文件或 Ansible 這樣的高級(jí)設(shè)置。然而,這個(gè)簡(jiǎn)單的過(guò)程運(yùn)作良好,這也許是因?yàn)?Pareto 原則(也被稱作 80/20 法則)。

DevOps 和 CI/CD 流水線的簡(jiǎn)要介紹

如果你問(wèn)一些人,“什么是 DevOps?”,你或許會(huì)得到一些不同的回答。DevOps,就像敏捷,已經(jīng)發(fā)展到涵蓋著諸多不同的學(xué)科,但大多數(shù)人至少會(huì)同意這些:DevOps 是一個(gè)軟件開(kāi)發(fā)實(shí)踐或一個(gè)軟件開(kāi)發(fā)生命周期software development lifecycle(SDLC),并且它的核心原則是一種文化上的變革 —— 開(kāi)發(fā)人員與非開(kāi)發(fā)人員呼吸著同一片天空的氣息,之前手工的事情變得自動(dòng)化;每個(gè)人做著自己擅長(zhǎng)的事;同一時(shí)間的部署變得更加頻繁;吞吐量提升;靈活度增加。

雖然擁有正確的軟件工具并非實(shí)現(xiàn) DevOps 環(huán)境所需的唯一東西,但一些工具卻是必要的。最關(guān)鍵的一個(gè)便是持續(xù)集成和持續(xù)部署(CI/CD)。在流水線環(huán)境中,擁有不同的構(gòu)建階段(例如:DEV、INT、TST、QA、UAT、STG、PROD),手動(dòng)的工作能實(shí)現(xiàn)自動(dòng)化,開(kāi)發(fā)人員可以實(shí)現(xiàn)高質(zhì)量的代碼,靈活而且大量部署。

這篇文章描述了一個(gè)構(gòu)建 DevOps 流水線的五步方法,就像下圖所展示的那樣,使用開(kāi)源的工具實(shí)現(xiàn)。

 

Complete DevOps pipeline

閑話少說(shuō),讓我們開(kāi)始吧。

第一步:CI/CD 框架

首先你需要的是一個(gè) CI/CD 工具,Jenkins,是一個(gè)基于 Java 的 MIT 許可下的開(kāi)源 CI/CD 工具,它是推廣 DevOps 運(yùn)動(dòng)的工具,并已成為了事實(shí)標(biāo)準(zhǔn)de facto standard。

所以,什么是 Jenkins?想象它是一種神奇的萬(wàn)能遙控,能夠和許多不同的服務(wù)器和工具打交道,并且能夠?qū)⑺鼈兘y(tǒng)一安排起來(lái)。就本身而言,像 Jenkins 這樣的 CI/CD 工具本身是沒(méi)有用的,但隨著接入不同的工具與服務(wù)器時(shí)會(huì)變得非常強(qiáng)大。

Jenkins 僅是眾多構(gòu)建 DevOps 流水線的開(kāi)源 CI/CD 工具之一。

名稱 許可證
Jenkins Creative Commons 和 MIT
Travis CI MIT
CruiseControl BSD
Buildbot GPL
Apache Gump Apache 2.0
Cabie GNU

下面就是使用 CI/CD 工具時(shí) DevOps 看起來(lái)的樣子。

 

CI/CD tool

你的 CI/CD 工具在本地主機(jī)上運(yùn)行,但目前你還不能夠做些別的。讓我們緊隨 DevOps 之旅的腳步。

第二步:源代碼控制管理

驗(yàn)證 CI/CD 工具可以執(zhí)行某些魔術(shù)的最佳(也可能是最簡(jiǎn)單)方法是與源代碼控制管理(SCM)工具集成。為什么需要源代碼控制?假設(shè)你在開(kāi)發(fā)一個(gè)應(yīng)用。無(wú)論你什么時(shí)候構(gòu)建應(yīng)用,無(wú)論你使用的是 Java、Python、C++、Go、Ruby、JavaScript 或任意一種語(yǔ)言,你都在編程。你所編寫(xiě)的程序代碼稱為源代碼。在一開(kāi)始,特別是只有你一個(gè)人工作時(shí),將所有的東西放進(jìn)本地文件夾里或許都是可以的。但是當(dāng)項(xiàng)目變得龐大并且邀請(qǐng)其他人協(xié)作后,你就需要一種方式來(lái)避免共享代碼修改時(shí)的合并沖突。你也需要一種方式來(lái)恢復(fù)一個(gè)之前的版本——備份、復(fù)制并粘貼的方式已經(jīng)過(guò)時(shí)了。你(和你的團(tuán)隊(duì))想要更好的解決方式。

這就是 SCM 變得不可或缺的原因。SCM 工具通過(guò)在倉(cāng)庫(kù)中保存代碼來(lái)幫助進(jìn)行版本控制與多人協(xié)作。

盡管這里有許多 SCM 工具,但 Git 是最標(biāo)準(zhǔn)恰當(dāng)?shù)摹N覙O力推薦使用 Git,但如果你喜歡這里仍有其他的開(kāi)源工具。

名稱 許可證
Git GPLv2 & LGPL v2.1
Subversion Apache 2.0
Concurrent Versions System (CVS) GNU
Vesta LGPL
Mercurial GNU GPL v2+

擁有 SCM 之后,DevOps 流水線看起來(lái)就像這樣。

 

Source control management

CI/CD 工具能夠自動(dòng)化進(jìn)行源代碼檢入檢出以及完成成員之間的協(xié)作。還不錯(cuò)吧?但是,如何才能把它變成可工作的應(yīng)用程序,使得數(shù)十億人來(lái)使用并欣賞它呢?

第三步:自動(dòng)化構(gòu)建工具

真棒!現(xiàn)在你可以檢出代碼并將修改提交到源代碼控制,并且可以邀請(qǐng)你的朋友就源代碼控制進(jìn)行協(xié)作。但是到目前為止你還沒(méi)有構(gòu)建出應(yīng)用。要想讓它成為一個(gè)網(wǎng)頁(yè)應(yīng)用,必須將其編譯并打包成可部署的包或可執(zhí)行程序(注意,像 JavaScript 或 PHP 這樣的解釋型編程語(yǔ)言不需要進(jìn)行編譯)。

于是就引出了自動(dòng)化構(gòu)建工具。無(wú)論你決定使用哪一款構(gòu)建工具,它們都有一個(gè)共同的目標(biāo):將源代碼構(gòu)建成某種想要的格式,并且將清理、編譯、測(cè)試、部署到某個(gè)位置這些任務(wù)自動(dòng)化。構(gòu)建工具會(huì)根據(jù)你的編程語(yǔ)言而有不同,但這里有一些通常使用的開(kāi)源工具值得考慮。

名稱 許可證 編程語(yǔ)言
Maven Apache 2.0 Java
Ant Apache 2.0 Java
Gradle Apache 2.0 Java
Bazel Apache 2.0 Java
Make GNU N/A
Grunt MIT JavaScript
Gulp MIT JavaScript
Buildr Apache Ruby
Rake MIT Ruby
A-A-P GNU Python
SCons MIT Python
BitBake GPLv2 Python
Cake MIT C#
ASDF Expat (MIT) LISP
Cabal BSD Haskell

太棒了!現(xiàn)在你可以將自動(dòng)化構(gòu)建工具的配置文件放進(jìn)源代碼控制管理系統(tǒng)中,并讓你的 CI/CD 工具構(gòu)建它。

 

Build automation tool

一切都如此美好,對(duì)吧?但是在哪里部署它呢?

第四步:網(wǎng)頁(yè)應(yīng)用服務(wù)器

到目前為止,你有了一個(gè)可執(zhí)行或可部署的打包文件。對(duì)任何真正有用的應(yīng)用程序來(lái)說(shuō),它必須提供某種服務(wù)或者接口,所以你需要一個(gè)容器來(lái)發(fā)布你的應(yīng)用。

對(duì)于網(wǎng)頁(yè)應(yīng)用,網(wǎng)頁(yè)應(yīng)用服務(wù)器就是容器。應(yīng)用程序服務(wù)器提供了環(huán)境,讓可部署包中的編程邏輯能夠被檢測(cè)到、呈現(xiàn)界面,并通過(guò)打開(kāi)套接字為外部世界提供網(wǎng)頁(yè)服務(wù)。在其他環(huán)境下你也需要一個(gè) HTTP 服務(wù)器(比如虛擬機(jī))來(lái)安裝服務(wù)應(yīng)用。現(xiàn)在,我假設(shè)你將會(huì)自己學(xué)習(xí)這些東西(盡管我會(huì)在下面討論容器)。

這里有許多開(kāi)源的網(wǎng)頁(yè)應(yīng)用服務(wù)器。

名稱 協(xié)議 編程語(yǔ)言
Tomcat Apache 2.0 Java
Jetty Apache 2.0 Java
WildFly GNU Lesser Public Java
GlassFish CDDL & GNU Less Public Java
Django 3-Clause BSD Python
Tornado Apache 2.0 Python
Gunicorn MIT Python
Python Paste MIT Python
Rails MIT Ruby
Node.js MIT Javascript

現(xiàn)在 DevOps 流水線差不多能用了,干得好!

 

Web application server

盡管你可以在這里停下來(lái)并進(jìn)行進(jìn)一步的集成,但是代碼質(zhì)量對(duì)于應(yīng)用開(kāi)發(fā)者來(lái)說(shuō)是一件非常重要的事情。

第五步:代碼覆蓋測(cè)試

實(shí)現(xiàn)代碼測(cè)試件可能是另一個(gè)麻煩的需求,但是開(kāi)發(fā)者需要盡早地捕捉程序中的所有錯(cuò)誤并提升代碼質(zhì)量來(lái)保證最終用戶滿意度。幸運(yùn)的是,這里有許多開(kāi)源工具來(lái)測(cè)試你的代碼并提出改善質(zhì)量的建議。甚至更好的,大部分 CI/CD 工具能夠集成這些工具并將測(cè)試過(guò)程自動(dòng)化進(jìn)行。

代碼測(cè)試分為兩個(gè)部分:“代碼測(cè)試框架”幫助進(jìn)行編寫(xiě)與運(yùn)行測(cè)試,“代碼質(zhì)量改進(jìn)工具”幫助提升代碼的質(zhì)量。

代碼測(cè)試框架

名稱 許可證 編程語(yǔ)言
JUnit Eclipse Public License Java
EasyMock Apache Java
Mockito MIT Java
PowerMock Apache 2.0 Java
Pytest MIT Python
Hypothesis Mozilla Python
Tox MIT Python

代碼質(zhì)量改進(jìn)工具

名稱 許可證 編程語(yǔ)言
Cobertura GNU Java
CodeCover Eclipse Public (EPL) Java
Coverage.py Apache 2.0 Python
Emma Common Public License Java
JaCoCo Eclipse Public License Java
Hypothesis Mozilla Python
Tox MIT Python
Jasmine MIT JavaScript
Karma MIT JavaScript
Mocha MIT JavaScript
Jest MIT JavaScript

注意,之前提到的大多數(shù)工具和框架都是為 Java、Python、JavaScript 寫(xiě)的,因?yàn)?C++ 和 C# 是專有編程語(yǔ)言(盡管 GCC 是開(kāi)源的)。

現(xiàn)在你已經(jīng)運(yùn)用了代碼覆蓋測(cè)試工具,你的 DevOps 流水線應(yīng)該就像教程開(kāi)始那幅圖中展示的那樣了。

可選步驟

容器

正如我之前所說(shuō),你可以在虛擬機(jī)(VM)或服務(wù)器上發(fā)布你的應(yīng)用,但是容器是一個(gè)更好的解決方法。

什么是容器?簡(jiǎn)要的介紹就是 VM 需要占用操作系統(tǒng)大量的資源,它提升了應(yīng)用程序的大小,而容器僅僅需要一些庫(kù)和配置來(lái)運(yùn)行應(yīng)用程序。顯然,VM 仍有重要的用途,但容器對(duì)于發(fā)布應(yīng)用(包括應(yīng)用程序服務(wù)器)來(lái)說(shuō)是一個(gè)更為輕量的解決方式。

盡管對(duì)于容器來(lái)說(shuō)也有其他的選擇,但是 Docker 和 Kubernetes 更為廣泛。

名稱 許可證
Docker Apache 2.0
Kubernetes Apache 2.0

了解更多信息,請(qǐng)查看 Opensource.com 上關(guān)于 Docker 和 Kubernetes 的其它文章:

中間件自動(dòng)化工具

我們的 DevOps 流水線大部分集中在協(xié)作構(gòu)建與部署應(yīng)用上,但你也可以用 DevOps 工具完成許多其他的事情。其中之一便是利用它實(shí)現(xiàn)基礎(chǔ)設(shè)施管理Infrastructure as Code(IaC)工具,這也是熟知的中間件自動(dòng)化工具。這些工具幫助完成中間件的自動(dòng)化安裝、管理和其他任務(wù)。例如,自動(dòng)化工具可以用正確的配置下拉應(yīng)用程序,例如網(wǎng)頁(yè)服務(wù)器、數(shù)據(jù)庫(kù)和監(jiān)控工具,并且部署它們到應(yīng)用服務(wù)器上。

這里有幾個(gè)開(kāi)源的中間件自動(dòng)化工具值得考慮:

名稱 許可證
Ansible GNU Public
SaltStack Apache 2.0
Chef Apache 2.0
Puppet Apache or GPL

獲取更多中間件自動(dòng)化工具,查看 Opensource.com 上的其它文章:

之后的發(fā)展

這只是一個(gè)完整 DevOps 流水線的冰山一角。從 CI/CD 工具開(kāi)始并且探索其他可以自動(dòng)化的東西來(lái)使你的團(tuán)隊(duì)更加輕松的工作。并且,尋找開(kāi)源通訊工具可以幫助你的團(tuán)隊(duì)一起工作的更好。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2019-11-07 09:00:39

Jenkins流水線開(kāi)源

2017-02-28 15:40:30

Docker流水線Azure

2014-04-01 10:20:00

開(kāi)源Rails

2022-04-24 15:21:01

MarkdownHTML

2017-02-28 16:00:45

DevOpsMarkdownreST

2012-03-14 10:56:23

web app

2022-07-22 13:14:57

TypeScript指南

2010-06-13 11:13:38

UML初學(xué)者指南

2022-10-10 15:28:45

負(fù)載均衡

2021-05-10 08:50:32

網(wǎng)絡(luò)管理網(wǎng)絡(luò)網(wǎng)絡(luò)性能

2023-07-28 07:31:52

JavaScriptasyncawait

2022-03-28 09:52:42

JavaScript語(yǔ)言

2023-07-03 15:05:07

預(yù)測(cè)分析大數(shù)據(jù)

2021-01-05 08:39:51

容器前端流水線

2023-08-18 10:24:52

GitLabCI 流水線

2018-10-28 16:14:55

Reactreact.js前端

2010-08-26 15:47:09

vsftpd安裝

2022-09-05 15:36:39

Linux日志記錄syslogd

2023-02-10 08:37:28

2011-03-22 09:42:46

云管理工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)