1. 程式人生 > >CI/CD持續整合/持續部署 敏捷開發

CI/CD持續整合/持續部署 敏捷開發

敏捷軟體開發(英語:Agile software development),又稱敏捷開發,是一種從1990年代開始逐漸引起廣泛關注的一些新型軟體開發方法,是一種應對快速變化的需求的一種軟體開發能力。它們的具體名稱、理念、過程、術語都不盡相同,相對於“非敏捷”,更強調程式設計師團隊與業務專家之間的緊密協作、面對面的溝通(認為比書面的文件更有效)、頻繁交付新的軟體版本、緊湊而自我組織型的團隊、能夠很好地適應需求變化的程式碼編寫和團隊組織方法,也更注重軟體開發過程中人的作用。

1,CI/CD持續整合/持續部署

持續整合(Continuous integration)是一種軟體開發實踐,即團隊開發成員經常整合它們的工作,通過每個成員每天至少整合一次,也就意味著每天可能會發生多次整合。每次整合都通過自動化的構建(包括編譯,釋出,自動化測試)來驗證,從而儘早地發現整合錯誤。

持續部署continuous deployment)是通過自動化的構建、測試和部署迴圈來快速交付高質量的產品。某種程度上代表了一個開發團隊工程化的程度,畢竟快速運轉的網際網路公司人力成本會高於機器,投資機器優化開發流程化相對也提高了人的效率,讓 engineering productivity 最大化。

   持續交付(英語:Continuous delivery,縮寫為 CD),是一種軟體工程手法,讓軟體產品的產出過程在一個短週期內完成,以保證軟體可以穩定、持續的保持在隨時可以釋出的狀況。它的目標在於讓軟體的建置、測試與釋出變得更快以及更頻繁。這種方式可以減少軟體開發的成本與時間,減少風險。

  與DevOps的關係

持續交付與DevOps的含義很相似,所以經常被混淆。但是它們是不同的兩個概念。DevOps的範圍更廣,它以文化變遷為中心,特別是軟體交付過程所涉及的多個團隊之間的合作(開發、運維、QA、管理部門等),並且將軟體交付的過程自動化。另壹方面,持續交付是壹種自動化交付的手段,關注點在於將不同的過程集中起來,並且更快、更頻繁地執行這些過程。因此,DevOps可以是持續交付的壹個產物,持續交付直接匯入DevOps;

  與持續部署的關係

有時候,持續交付也與持續部署混淆。持續部署意味著所有的變更都會被自動部署到生產環境中。持續交付意味著所有的變更都可以被部署到生產環境中,但是出於業務考慮,可以選擇不部署。如果要實施持續部署,必須先實施持續交付。

1.1、enkins是什麼?

Jenkins是一個可擴充套件的持續整合引擎。

主要用用途:

持續、自動的構建/測試軟體專案。

監控一些定時執行的任務。、

特點:

易於安裝,只要把jenkins.war部署到servlet容器

易於配置-所有配置都通過其提供的web介面實現。

整合RSS/E-mail通過RSS釋出構建結果或當構件完成是通過e-mail通知。

生成JUnit/TestNG測試報告。

分散式構建支援Jenkins能夠讓多臺計算機一起構建/測試。

檔案識別:Jenkins能夠跟蹤那次構建生成哪些jar,那次構建使用哪個版本的jar

插入支援:支援擴充套件外掛,可以開發適合自己團隊的使用的工具。

Jenkins的目標是監控軟體的開發流程,快速顯示問題。所以能保證開發人員省事又省力提高開發效率。

2、專案版本迭代控制:、

現有的版本控制工具,如 Github、GitLab、SVN、CVS 等主流工具..

構建及測試:通過 Jenkins 實現自動構建和測試,還有商業軟體BAMBOO來持續整合。這個收費的。免費就用Jenkins..

交付:以Docker映象形式進行交付,提交至映象倉庫;

2.1 SVN伺服器:

Subversion是一個版本控制系統,相對於的RCS、CVS,採用了分支管理系統,它的設計目標就是取代CVS。網際網路上免費的版本控制服務多基於Subversion。

Subversion的版本庫可以通過網路訪問,從而使使用者可以在不同的電腦上進行操作。從某種程度上來說,允許使用者在各自的空間裡修改和管理同一組資料可以促進團隊協作。因為修改不再是單線進行(單線進行也就是必須一個一個進行),開發進度會進展迅速。此外,由於所有的工作都已版本化,也就不必擔心由於錯誤的更改而影響軟體質量—如果出現不正確的更改,只要撤銷那一次更改操作即可。某些版本控制系統本身也是軟體配置管理系統(SCM),這種系統經過精巧的設計,專門用來管理原始碼樹,並且具備許多與軟體開發有關的特性——比如對程式語言的支援或者提供程式構建工具。不過Subversion並不是這樣的系統,它是一個通用系統,可以管理任何型別的檔案集。

2.2 CVS伺服器:

CVS(Concurrent Versions System)版本控制系統是一種GNU軟體包,主要用於在多人開發環境下原始碼的維護。Concurrent有併發的、協作的、一致的等含義。實際上CVS可以維護任意文件的開發和使用,例如共享檔案的編輯修改,而不僅僅侷限於程式設計。CVS維護的檔案型別可以是文字型別也可以是二進位制型別。CVS用Copy-Modify-Merge(拷貝、修改、合併)變化表支援對檔案的同時訪問和修改。它明確地將原始檔的儲存和使用者的工作空間獨立開來,並使其並行操作。CVS基於客戶端/伺服器的行為使其可容納多個使用者。這一特性使得CVS成為位於不同地點的人同時處理資料檔案(特別是程式的原始碼)時的首選。

所有重要的免費軟體專案都使用CVS作為其程式設計師之間的中心點,以便能夠綜合各程式設計師的改進和更改。這些專案包括GNOME、KDE、THE GIMP和Wine等。

2.3 GIt/github:

    GIT (分散式版本控制系統)

Git是一款免費、開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。Git的讀音為/gɪt/。

Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。Torvalds 開始著手開發 Git 是為了作為一種過渡方案來替代 BitKeeper,後者之前一直是 Linux 核心開發人員在全球使用的主要原始碼工具。開放原始碼社群中的有些人覺得BitKeeper 的許可證並不適合開放原始碼社群的工作,因此 Torvalds 決定著手研究許可證更為靈活的版本控制系統。儘管最初 Git 的開發是為了輔助 Linux 核心開發的過程,但是我們已經發現在很多其他自由軟體專案中也使用了 Git。例如 很多 Freedesktop 的專案遷移到了 Git 上。

gitHub是一個面向開源及私有軟體專案的託管平臺,因為只支援git 作為唯一的版本庫格式進行託管,故名gitHub。

gitHub於2008年4月10日正式上線,除了git程式碼倉庫託管及基本的 Web管理介面以外,還提供了訂閱、討論組、文字渲染、線上檔案編輯器、協作圖譜(報表)、程式碼片段分享(Gist)等功能。目前,其註冊使用者已經超過350萬,託管版本數量也是非常之多,其中不乏知名開源專案 Ruby on Rails、jQuery、python 等。