自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

有了Jenkins,為什么還需要一個(gè)獨(dú)立的部署系統(tǒng)

運(yùn)維 系統(tǒng)運(yùn)維 系統(tǒng)
為保障服務(wù)的高可用,落實(shí)部署和發(fā)布的解耦以及其他業(yè)務(wù)需要,用戶(hù)常需要支持如灰度發(fā)布、A/B測(cè)試發(fā)布等部署需求。一個(gè)獨(dú)立的部署系統(tǒng)在此可以提供多種部署策略,并結(jié)合環(huán)境管理等其他功能滿(mǎn)足業(yè)務(wù)上對(duì)部署和發(fā)布的各種需求。同樣,Jenkins及其部署插件并沒(méi)有提供這樣的能力。

   作者介紹

[[162538]] 

  徐桂林,當(dāng)前在FIT2CLOUD負(fù)責(zé)公司的技術(shù)布道和生態(tài)合作。在此之前先后供職于意法半導(dǎo)體、Autodesk和阿里云。徐桂林熱衷于云計(jì)算(尤其是公有云IaaS平臺(tái)),有過(guò)多年AWS的生產(chǎn)環(huán)境工作經(jīng)歷,是較早在國(guó)內(nèi)分享AWS上實(shí)踐經(jīng)驗(yàn)的作者之一。

  需不需要一個(gè)獨(dú)立的部署系統(tǒng)是很多企業(yè)用戶(hù)在構(gòu)建持續(xù)交付流程中經(jīng)常困惑的一個(gè)問(wèn)題。也經(jīng)常有用戶(hù)會(huì)問(wèn)我們,現(xiàn)在已經(jīng)有Jenkins,它自身提供了豐富的部署插件(如WebSphere部署插件、Tomcat部署插件等),方便用戶(hù)直接把構(gòu)建出來(lái)的部署包自動(dòng)化部署到指定機(jī)器(甚至云服務(wù))。那為什么不可以圍繞Jenkins,集成一系列部署流程,從而不需要額外搭建一個(gè)獨(dú)立的部署系統(tǒng)?

  注:本文以Jenkins為例來(lái)說(shuō)明獨(dú)立部署系統(tǒng)的重要性。但持續(xù)構(gòu)建工具不僅僅限制于Jenkins,還包括如BuildForge、TeamCity、CruiseControl等,而它們和獨(dú)立部署系統(tǒng)的關(guān)系與Jenkins基本都一致。

  持續(xù)交付與部署系統(tǒng)

  上面提出了一個(gè)非常好的問(wèn)題,但是要回答這個(gè)問(wèn)題,我們需要從更大的視角(即持續(xù)交付)來(lái)理解一個(gè)部署系統(tǒng)需要扮演的角色,而不僅僅從自動(dòng)化部署過(guò)程這一點(diǎn)(盡管這一點(diǎn)也非常重要)來(lái)理解它。首先,讓我們看看軟件生產(chǎn)中從代碼到最終服務(wù)的典型流程(如下圖)。

 

  從上圖中可以看出,從開(kāi)發(fā)人員寫(xiě)下代碼到服務(wù)最終用戶(hù)是一個(gè)漫長(zhǎng)過(guò)程,整體可以分成三個(gè)階段:

  1.從代碼(Code)到制品庫(kù)(Artifact):這個(gè)階段主要對(duì)開(kāi)發(fā)人員的代碼做持續(xù)構(gòu)建并把構(gòu)建產(chǎn)生的制品集中管理,是為部署系統(tǒng)準(zhǔn)備輸入內(nèi)容的階段。

  2.從制品到可運(yùn)行服務(wù):這個(gè)階段主要完成制品部署到指定環(huán)境,是部署系統(tǒng)的最基本工作內(nèi)容。

  3.從開(kāi)發(fā)環(huán)境到最終生產(chǎn)環(huán)境:這個(gè)階段主要完成一次變更在不同環(huán)境的遷移,是部署系統(tǒng)上線最終服務(wù)的核心能力。

  如果從持續(xù)交付角度看,其最核心訴求就是要讓上圖三個(gè)階段能夠無(wú)縫連接并自動(dòng)化運(yùn)行起來(lái),從而達(dá)到持續(xù)交付的兩個(gè)核心目標(biāo):提高交付頻率(部署次數(shù))和降低部署延時(shí)(從代碼提交到上線的時(shí)間差)。

  持續(xù)交付對(duì)部署系統(tǒng)的要求

  參照如上持續(xù)交付的流程,可以發(fā)現(xiàn)持續(xù)交付對(duì)于一個(gè)部署系統(tǒng)的要求絕對(duì)不僅僅是一個(gè)自動(dòng)化的部署過(guò)程,這也是在有了Jenkins和其相關(guān)部署插件后仍然需要搭建獨(dú)立部署系統(tǒng)的原因所在。具體來(lái)說(shuō),我們可以從下面幾點(diǎn)分析:

  1.解耦構(gòu)建和部署過(guò)程

  盡管持續(xù)交付希望自動(dòng)化完成從代碼到部署上線的整個(gè)流程。但是整個(gè)持續(xù)交付過(guò)程有多個(gè)不同角色的人參與其中(開(kāi)發(fā)、測(cè)試、運(yùn)維甚至還有經(jīng)理及市場(chǎng)人員)。其中,有些角色(如開(kāi)發(fā)/測(cè)試)需要關(guān)心構(gòu)建過(guò)程,而更多的角色(如運(yùn)維等)絕大時(shí)候都是從制品開(kāi)始部署工作。這也就要求構(gòu)建和部署過(guò)程相互解耦,能夠獨(dú)立操作。

  如果基于Jenkins直接觸發(fā)部署,要直接綁定構(gòu)建和部署過(guò)程。構(gòu)建和部署這兩個(gè)過(guò)程通過(guò)制品(Artifact,又稱(chēng)為部署包)連接(制品是構(gòu)建過(guò)程的產(chǎn)出,同時(shí)是部署過(guò)程的輸入)。如果它們相互解耦,自然就需要有統(tǒng)一的地方管理存儲(chǔ)和管理這些制品,即統(tǒng)一制品庫(kù)。

  有了統(tǒng)一制品庫(kù)后,構(gòu)建過(guò)程自動(dòng)提交產(chǎn)生的制品到此,而部署過(guò)程則主動(dòng)到制品庫(kù)拉取需要的制品進(jìn)行部署,從而實(shí)現(xiàn)構(gòu)建和部署的完整解耦。

  2.管理復(fù)雜的部署環(huán)境

  如前所述,服務(wù)上線需要涉及到很多不同目的環(huán)境(開(kāi)發(fā)、測(cè)試、預(yù)發(fā)、生產(chǎn)、演示等)。而且,在越來(lái)越多的云化基礎(chǔ)設(shè)施中,環(huán)境內(nèi)部的資源會(huì)頻繁變化(例如,Auto-Scaling時(shí)刻都有可能添加或者減少你的云主機(jī))。

  這時(shí)候需要對(duì)部署流程隔離部署環(huán)境差異以及環(huán)境內(nèi)頻繁變化的基礎(chǔ)設(shè)施。當(dāng)需要執(zhí)行一個(gè)部署時(shí),操作人員只需要指定部署到哪個(gè)環(huán)境(即環(huán)境名稱(chēng)或者ID號(hào)),而不需要關(guān)心環(huán)境內(nèi)部的任何信息。

  由部署系統(tǒng)負(fù)責(zé)把部署請(qǐng)求分發(fā)到指定環(huán)境內(nèi)的每臺(tái)主機(jī)并自動(dòng)執(zhí)行。如果基于Jenkins來(lái)直接部署,則必然把環(huán)境管理的很多復(fù)雜度引入到部署流程內(nèi)部。

  3.支持多種部署策略

  為保障服務(wù)的高可用,落實(shí)部署和發(fā)布的解耦以及其他業(yè)務(wù)需要,用戶(hù)常需要支持如灰度發(fā)布、A/B測(cè)試發(fā)布等部署需求。一個(gè)獨(dú)立的部署系統(tǒng)在此可以提供多種部署策略,并結(jié)合環(huán)境管理等其他功能滿(mǎn)足業(yè)務(wù)上對(duì)部署和發(fā)布的各種需求。同樣,Jenkins及其部署插件并沒(méi)有提供這樣的能力。

  4.落實(shí)部署流程規(guī)范

  在一個(gè)公司內(nèi)部經(jīng)常有不同的項(xiàng)目,使用不同的編程語(yǔ)言,而部署流程也五花八門(mén)。從控制風(fēng)險(xiǎn),減少重復(fù)操作,降低部署自動(dòng)化難度等多重考量,公司都傾向制定一套標(biāo)準(zhǔn)的部署流程。

  這時(shí)候,獨(dú)立的部署系統(tǒng)就可以幫助用把這些規(guī)范落實(shí)下去并在日常的部署過(guò)程中時(shí)刻校驗(yàn)(在軟件工程領(lǐng)域,幾乎所有的規(guī)范落實(shí)都得靠工具來(lái)助一臂之力,否則基本都會(huì)變成紙面上的規(guī)范而已)。

  如果基于Jenkins來(lái)直接部署,如何落實(shí)這些部署規(guī)范仍然是一個(gè)很困難的事情,因?yàn)镴enkins及其部署插件并未對(duì)此提供任何實(shí)質(zhì)性的支持。

  5.獲取部署運(yùn)營(yíng)數(shù)據(jù)

  部署是一個(gè)團(tuán)隊(duì)從代碼到服務(wù)的關(guān)鍵路徑,這上面的所有操作數(shù)據(jù)都值得記錄并用于各種運(yùn)營(yíng)支持(包括安全審計(jì)、部署記錄查詢(xún)、部署頻率和失敗率分析等等)?;贘enkins直接部署當(dāng)然也可以獲取這些數(shù)據(jù),但是把它做在獨(dú)立的部署系統(tǒng)內(nèi)會(huì)更靈活和方便。

  6.讓部署操作服務(wù)化

  如之前提到,部署不僅僅開(kāi)發(fā)和測(cè)試人員需要,要努力讓部署服務(wù)化,從而讓團(tuán)隊(duì)內(nèi)任何一個(gè)人都可以隨時(shí)觸發(fā)一次部署。Jenkins的操作界面對(duì)于開(kāi)發(fā)或者測(cè)試人員可能還比較方便,但是對(duì)于其他人員來(lái)說(shuō)則過(guò)于復(fù)雜(而且對(duì)于部署操作也不友好)。獨(dú)立部署系統(tǒng)可以在這方面做得更好,幫助更多的人低門(mén)檻完成部署操作。

  當(dāng)然,除了上面列出的這些原因外,獨(dú)立部署系統(tǒng)還有其他一些優(yōu)勢(shì)(如方便部署版本管理等),這里就不一一列舉。通過(guò)如上分析,我希望大家對(duì)于一個(gè)獨(dú)立部署系統(tǒng)的優(yōu)勢(shì)以及它需要包含的內(nèi)容能有一個(gè)整體理解。

  當(dāng)然,你可能會(huì)說(shuō)“我正在按照上面的這些要求、基于Jenkins做自己的部署流程”。如果真是這樣,那恭喜你!其實(shí)你已經(jīng)走在構(gòu)建一個(gè)獨(dú)立部署系統(tǒng)的路上,而它和Jenkins的關(guān)系其實(shí)已經(jīng)不大,或許你還可以考慮把這套系統(tǒng)對(duì)接其他構(gòu)建系統(tǒng)(如CruiseControl、TeamCity等)。

  寫(xiě)在最后

  如前所述,一個(gè)獨(dú)立的部署系統(tǒng)需要包括的內(nèi)容是非常豐富的(絕對(duì)不僅僅是Jenkins部署插件要做的那些事情)。如下圖所示,部署系統(tǒng)需要連接項(xiàng)目中涉及的人、環(huán)境、制品庫(kù)以及構(gòu)建環(huán)境等,只不過(guò)這種連接的目的是打通從制品到最終服務(wù)的整個(gè)流程(即本文之前持續(xù)交付流程中的第二及第三階段)。

 

責(zé)任編輯:武曉燕 來(lái)源: 高效運(yùn)維
相關(guān)推薦

2023-09-12 14:02:30

數(shù)組vector

2021-10-12 18:48:07

HTTP 協(xié)議Websocket網(wǎng)絡(luò)通信

2023-10-24 15:15:26

HTTPWebSocket

2024-02-22 10:34:00

NULLC++nullptr

2024-02-18 12:39:15

C++autodecltype

2023-04-07 15:30:24

操作系統(tǒng)ChatGPT

2025-04-09 11:15:00

服務(wù)熔斷服務(wù)降分布式系統(tǒng)

2024-11-26 07:37:22

2024-05-06 09:35:05

AI網(wǎng)關(guān)開(kāi)源

2020-05-13 15:57:59

聚類(lèi)分析算法監(jiān)督學(xué)習(xí)

2025-01-07 14:36:12

2023-01-31 17:24:21

DPUCPUGPU

2024-04-03 08:53:16

PythonGIL線程

2023-09-14 16:02:27

2016-11-09 06:50:43

SDN

2023-06-01 07:50:42

JSDocTypeScriptAPI

2015-06-19 06:41:45

生命科學(xué)云計(jì)算集群計(jì)算

2020-12-11 07:39:37

RPC MQ架構(gòu)

2010-07-15 16:21:22

編程語(yǔ)言

2015-10-23 10:53:54

OpenStackNFV網(wǎng)絡(luò)功能虛擬化
點(diǎn)贊
收藏

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