天天看點

Jenkins持續內建學習筆記(1)

  1. 持續內建及Jenkins介紹
  2. Jenkins安裝和持續內建環境配置
  3. Jenkins建構Maven項目
  4. Jenkins+Docker+SpringCloud微服務持續內建
  5. 基于Kubernetes/K8S建構Jenkins微服務持續內建平台

1、持續內建及Jenkins介紹

軟體開發生命周期

  • 軟體開發生命周期又叫做SDLC(Software Development Life Cycle),它是集合了計劃、開發、測試和部署過程的集合。如下圖所示:
    Jenkins持續內建學習筆記(1)
  • 需求分析

這是生命周期的第一階段,根據項目需求,團隊執行一個可行性計劃的分析。項目需求可能是公司内部或者客戶提出的。這階段主要是對資訊的收集,也有可能是對現有項目的改善和重新做一個新的項目。還要分析項目的預算多長,可以從哪方面受益及布局,這也是項目建立的目标。

  • 設計

第二階段就是設計階段,系統架構和滿意狀态(就是要做成什麼樣子,有什麼功能),和建立一個項目計劃。計劃可以使用圖表,布局設計或者文者的方式呈現。

  • 實作

第三階段就是實作階段,項目經理建立和配置設定工作給開者,開發者根據任務和在設計階段定義的目标進行開發代碼。依據項目的大小和複雜程度,可以需要數月或更長時間才能完成。

  • 測試

測試人員進行代碼測試,包括功能測試、代碼測試、壓力測試等。

  • 進化

最後進階段就是對産品不斷的進化改進和維護階段,根據使用者的使用情況,可能需要對某功能進行修改,bug修複,功能增加等。

軟體開發瀑布模型

  • 瀑布模型是最著名和最常使用的軟體開發模型。瀑布模型就是一系列的軟體開發過程。它是由制造業繁衍出來的。一個高度化的結構流程在一個方向上流動,有點像生産線一樣。在瀑布模型建立之初,沒有其它開發的模型,有很多東西全靠開發人員去猜測,去開發。這樣的模型僅适用于那些簡單的軟體開發,但是已經不适合現在的開發了。

下圖對軟體開發模型的一個闡述。

Jenkins持續內建學習筆記(1)
Jenkins持續內建學習筆記(1)

軟體的靈活開發

什麼是靈活開發?

  • 靈活開發(Agile Development)的核心是疊代開發(Iterative Development)與增量開發(Incremental Development)。

何為疊代開發?

  • 對于大型軟體項目,傳統的開發方式是采用一個大周期(比如一年)進行開發,整個過程就是一次"大開發";疊代開發的方式則不一樣,它将開發過程拆分成多個小周期,即一次"大開發"變成多次"小開發",每次小開發都是同樣的流程,是以看上去就好像重複在做同樣的步驟。
  • 舉例來說,SpaceX 公司想造一個大推力火箭,将人類送到火星。但是,它不是一開始就造大火箭,而是先造一個最簡陋的小火箭 Falcon1。結果,第一次發射就爆炸了,直到第四次發射,才成功進入軌道。然後,開發了中型火箭 Falcon 9,九年中發射了70次。最後,才開發Falcon 重型火箭。如果SpaceX 不采用疊代開發,它可能直到現在還無法上天。

何為增量開發?

  • 軟體的每個版本,都會新增一個使用者可以感覺的完整功能。也就是說,按照新增功能來劃分疊代。
  • 舉例來說,房産公司開發一個10棟樓的小區。如果采用增量開發的模式,該公司第一個疊代就是傳遞一号樓,第二個疊代傳遞二号樓…每個疊代都是完成一棟完整的樓。而不是第一個疊代挖好10棟樓的地基,第二個疊代建好每棟樓的骨架,第三個疊代架設屋頂…

靈活開發如何疊代?

雖然靈活開發将軟體開發分成多個疊代,但是也要求,每次疊代都是一個完整的軟體開發周期,必須按照軟體工程的方法論,進行正規的流程管理。

Jenkins持續內建學習筆記(1)

靈活開發有什麼好處?

早期傳遞

  • 靈活開發的第一個好處,就是早期傳遞,進而大大降低成本。還是以上一節的房産公司為例,如果按照傳統的"瀑布開發模式",先挖10棟樓的地基、再蓋骨架、然後架設屋頂,每個階段都等到前一個階段完成後開始,可能需要兩年才能一次性傳遞10棟樓。也就是說,如果不考慮預售,該項目必須等到兩年後才能回款。靈活開發是六個月後傳遞一号樓,後面每兩個月傳遞一棟樓。是以,半年就能回款10%,後面每個月都會有現金流,資金壓力就大大減輕了。

降低風險

  • 靈活開發的第二個好處是,及時了解市場需求,降低産品不适用的風險。請想一想,哪一種情況損失比較小:10棟樓都造好以後,才發現賣不出去,還是造好第一棟樓,就發現賣不出去,進而改進或停建後面9棟樓?

什麼是持續內建

  1. 持續內建(Continuous integration ,簡稱 CI )指的是,頻繁地(一天多次)将代碼內建到主幹。
  2. 持續內建的目的,就是讓産品可以快速疊代,同時還能保持高品質。它的核心措施是,代碼內建到主幹之前,必須通過自動化測試。隻要有一個測試用例失敗,就不能內建。
  3. 通過持續內建,團隊可以快速的從一個功能到另一個功能,簡而言之,靈活軟體開發很大一部分都要歸功于持續內建。
Jenkins持續內建學習筆記(1)

根據持續內建的設計,代碼從送出到生産,整個過程有以下幾步。

  • 送出

流程的第一步,是開發者向代碼倉庫送出代碼。所有後面的步驟都始于本地代碼的一次送出(commit)。

  • 測試(第一輪)

代碼倉庫對commit操作配置了鈎子(hook),隻要送出代碼或者合并進主幹,就會跑自動化測試。

  • 建構

通過第一輪測試,代碼就可以合并進主幹,就算可以傳遞了。

傳遞後,就先進行建構(build),再進入第二輪測試。所謂建構,指的是将源碼轉換為可以運作的實際代碼,比如安裝依賴,配置各種資源(樣式表、JS腳本、圖檔)等等。

  • 測試(第二輪)

建構完成,就要進行第二輪測試。如果第一輪已經涵蓋了所有測試内容,第二輪可以省略,當然,這時建構步驟也要移到第一輪測試前面。

  • 部署

過了第二輪測試,目前代碼就是一個可以直接部署的版本(artifact)。将這個版本的所有檔案打包(tar filename.tar * )存檔,發到生産伺服器。

  • 復原

一旦目前版本發生問題,就要復原到上一個版本的建構結果。最簡單的做法就是修改一下符号連結,指向上一個版本的目錄。

持續內建的組成要素

  • 一個自動建構過程,從檢出代碼、編譯建構、運作測試、結果記錄、測試統計等都是自動完成的,無需人工幹預。
  • 一個代碼存儲庫,即需要版本控制軟體來保障代碼的可維護性,同時作為建構過程的素材庫,一般使用SVN或Git。
  • 一個持續內建伺服器, Jenkins 就是一個配置簡單和使用友善的持續內建伺服器。
    Jenkins持續內建學習筆記(1)

持續內建的好處

1、降低風險,由于持續內建不斷去建構,編譯和測試,可以很早期發現問題,是以修複的代價就少;

2、對系統健康持續檢查,減少釋出風險帶來的問題;

3、減少重複性工作;

4、持續部署,提供可部署單元包;

5、持續傳遞可供使用的版本;

6、增強團隊信心;

Jenkins介紹

Jenkins持續內建學習筆記(1)
  • Jenkins 是一款流行的開源持續內建(Continuous Integration)工具,廣泛用于項目開發,具有

    自動化建構、測試和部署

    等功能。官網:http://jenkins-ci.org/。

Jenkins的特征:

  • 開源的Java語言開發持續內建工具,支援持續內建,持續部署。
  • 易于安裝部署配置:可通過yum安裝,或下載下傳war包以及通過docker容器等快速實作安裝部署,可友善web界面配置管理。
  • 消息通知及測試報告:內建RSS/E-mail通過RSS釋出建構結果或當建構完成時通過e-mail通知,生成JUnit/TestNG測試報告。
  • 分布式建構:支援Jenkins能夠讓多台計算機一起建構/測試。
  • 檔案識别:Jenkins能夠跟蹤哪次建構生成哪些jar,哪次建構使用哪個版本的jar等。
  • 豐富的插件支援:支援擴充插件,你可以開發适合自己團隊使用的工具,如git,svn,maven,docker等。

繼續閱讀