天天看點

金融行業 DevOps 解決方案,第 5 部分 DevOps 實施之企業級的統一釋出平台

概述

在前面的幾篇文章裡,我們介紹了 DevOps 實施概述、基于 RTC 及 Build Forge 進行統一配置管理和建構,以及基于 Sonar 進行持續內建品質改進。本文将在此基礎上,對軟體釋出和部署進行介紹,同時對釋出和部署過程中所存在的一些問題,提出持續釋出和部署解決方案。本文将對該解決方案進行介紹。

從軟體需求定義,到軟體開發、測試、ST、UAT 到軟體投産,再到軟體的運維管理,軟體的釋出和部署是每個 IT 組織都需要持續關注和管理的。

  1. 軟體釋出和部署的能力高低直接關系到 IT 組織的商業價值傳遞能力,随着針對軟體開發的衆多方法論及最佳實踐的出現和推廣,例如:靈活開發、精益開發等,軟體開發團隊的開發能力得到了很大的提升,許多企業和 IT 組織在應用釋出和部署方面進行持續改進,進而確定軟體開發團隊傳遞的功能及時上線,進而提升商業價值的傳遞能力。
  2. 軟體的釋出和部署直接關系到 IT 組織的風險,應用釋出和部署的失敗往往意味着所在組織需要承受相應的商業風險以及商業價值的損失,許多企業和 IT 組織都在為如何提升應用釋出和部署的穩定性,進而降低應用釋出部署過程中帶來的風險及損失而持續努力。
  3. 軟體的釋出和部署涉及到開發團隊、運維團隊等多個團隊的協作,而傳統的開發與運維是相對隔離的,這客觀上給釋出和部署帶來了很大的挑戰, DevOps 從 2009 年被提出,在過去的幾年裡,許多企業和 IT 組織都在通過引入 DevOps 實踐,讓開發團隊和運維團隊在釋出和部署過程中更好協作,進而更好地完成應用的釋出和部署。

企業級應用釋出部署存在的問題

在過去的幾年裡,本文作者在參與的多個金融企業的釋出和部署管理過程中發現,每個企業甚至每個應用都有自己的釋出和部署方法,成熟度也不一而同,但不論成熟度如何,釋出和部署管理都不止是一份共享的電子資料表或者釋出部署文檔。通過觀察和總結,企業級應用釋出通常有如下幾個問題:

1. 應用類型多種多樣,技術百花齊放。

對于一個大型的 IT 企業來說,成百上千個應用往往涉及不同的程式設計語言(Java、C#、PHP、Delphi 等)、不同的中間件類型(WAS、Tomcat、JBoss 等)、不同的資料庫(DB2、Oracle 等)、不同的部署伺服器及部署架構(Windows、Linux、AIX 等),雖然企業通常有固定的釋出流程管控,但是對于具體應用的部署過程來講,往往千差萬别。

2. 開發團隊和運維團隊的相對隔離,增加了應用部署的難度。

一個大型的 IT 企業往往有專職的運維團隊來負責對開發團隊傳遞的軟體進行上線。開發團隊更了解需要上線的功能完成部署所需注意的事項以及在上線出現問題時進行及時的上線問題定位及快速修複,運維團隊更了解生産環境的配置以及應用在生産環境容易面臨的一些問題,開發團隊的關注點往往是如何快速地将開發部門的傳遞物部署到生産環境,而運維部門則是更多從運維的風險考慮,確定每一次上線都是安全的,可以保證生産環境在支援新的業務功能的情況下保持足夠的穩定,是以開發團隊和運維團隊在節奏上的差異對于上線部署存在天然的沖突。而開發階段和生産階段的部署差異,也決定了應用的部署資産(操作步驟、自動化工具等)不能很好地從開發階段流轉到生産階段供運維團隊完成投産操作。

3. 自動化程度偏低,手動操作導緻的釋出部署風險高。

釋出部署過程通常是一個複雜重複的操作過程,雖然每個企業甚至每個應用針對于釋出操作,都在進行不同程度的自動化,但總的看來,自動化程度偏低。而由于生産環境的複雜性,部署步驟往往相對複雜。例如:當一個應用需要手動部署到 10 台甚至更多的伺服器上,而在每台伺服器上重複相同的多達十個操作步驟時,很容易出現手動操作失誤引發的上線釋出失敗風險。

如何有效地解決如上問題也是每個企業在應用釋出部署領域所需要持續探索和改進的。在下面的章節中,我們将提出一套針對于企業級應用釋出的持續釋出 / 部署解決方案。

持續釋出 / 部署平台整體方案目标

考慮到傳統企業的釋出和部署管理的普遍現狀,針對于釋出和部署過程中存在的普遍問題,并結合釋出 / 部署管理的目标,持續釋出 / 部署解決方案緻力于如下目标實作:

  1. 針對于目前部署過程中部署操作自動化程度普遍偏低,釋出和部署效率低下的問題,本方案通過自動化部署工具,将部署過程中的手工操作盡可能地進行自動化。可以自動化的手工操作包括:擷取應用部署包、啟停伺服器器及相關服務、應用部署檔案的自動分發、應用部署後的自動檢測等等。部署操作自動化有效地提升了釋出部署過程的效率,降低手工操作帶來的潛在風險,確定在釋出過程中同一應用在不同目标伺服器節點的釋出一緻性。
  2. 針對于應用釋出和部署模式所存在的差異,通過對于不同類型的應用釋出部署,發現應用之間所存在的固定模式,基于不同釋出部署模式提供相應地支援,進而對于類似的應用釋出部署提供快速的支援。本方案針對幾種典型的釋出部署模式提供相應支援,例如: 固定版本排期釋出、單項目釋出、靈活釋出等。對于固定版本排期釋出,多個項目和多個産品進行統一排程,每個産品的上線版本在上線前完成合并,在釋出過程中,每個産品有自己的釋出視窗以及應用部署流程。
  3. 針對于應用釋出和部署過程中開發團隊、運維團隊及其他角色之間的互相協調,本方案內建已有的釋出和部署相關流程管控系統(如:項目管理系統、釋出管理系統等),進而在部署過程中,各團隊可以友善地了解部署相關資訊(如:上線項目是否可以進行釋出,釋出請求是否被準許,上線的版本名稱等)。同時在釋出部署過程中各團隊可以了解釋出部署過程中的釋出狀态,進而在發現問題時,相關團隊可以更快地定位問題并快速解決,并確定各個角色遵守既定流程互相協作,完成釋出和部署操作。

持續釋出 / 部署傳遞平台方案架構及概述

在本系列文章的第一篇中介紹了基于四層架構的端到端 DevOps 方案,而基于上述應用釋出和部署目标,持續釋出 / 部署解決方案架構如圖 1 所示:

圖 1. 持續釋出 / 部署傳遞平台架構圖

金融行業 DevOps 解決方案,第 5 部分 DevOps 實施之企業級的統一釋出平台
  • 基礎架構層為軟體釋出和部署的目标平台,平台可以為傳統的硬體平台,也可以是目前興起的雲平台:PaaS 平台或者 IaaS 平台。根據不同企業的情況,本方案可以按照企業的目标平台予以支援。
  • 流水線工具平台層提供了釋出和部署方案的核心工具支援,在本方案中,部署平台(開發、測試和生産)使用 IBM UrbanCode Deploy (下面簡稱 UCD)産品作為部署的自動化引擎。自動化引擎主要關注于應用部署操作的流程自動化,確定應用部署核心步驟的可視化及可重用性。
  • 流水線引擎層對于釋出和部署提供釋出部署的統一視圖支援,包括四個關鍵元件支援:
    • 應用釋出自服務管理、智能釋出管理、平台運維管理和釋出過程深入洞察。應用釋出自服務管理包括應用及元件的初始化、部署流程定制、版本配置管理等;
    • 智能釋出包括釋出相關資訊內建(從項目管理系統、釋出管理系統等同步釋出部署相關資訊),應用釋出模式支援,應用釋出部署過程支援(釋出前準備、釋出中的相關操作、釋出後的自動檢測及流程支援等),釋出部署過程中各團隊之間協作支援等;
    • 平台運維管理關注于應用釋出目标平台管理,包括傳統硬體平台和雲平台;
    • 釋出過程深入洞察針對于應用釋出和部署過程提供審計、報表等支援。由于開發測試階段與生産投産階段的天然差異,本方案使用兩個系統對開發測試和生産分别提供支援,對于同一産品的釋出和部署,支援相關資産的跨階段流轉。
  • 流程管控層對于釋出和部署相關流程提供支援。由于企業的 IT 系統架構的差異,釋出和部署流程管控支援除了項目管理、釋出管理之外,還可能包括運維監控、日志檢查、測試管理等。流程管控層提供釋出和部署過程中流程相關資料和資訊,供流水線引擎提供釋出部署統一試圖。

持續釋出 / 部署傳遞平台方案實施思路及方案介紹

方案實施思路

本方案實施過程中包括兩個階段:應用部署操作自動化支援和應用釋出部署平台支援。

注:IBM® UrbanCode Deploy 将應用、中間件配置以及資料庫的變更進行編排并自動部署到開發環境、測試環境和生産環境中,進而可以幫助加速産品上市、降低成本和風險。

  1. 應用部署操作自動化支援:本階段集中于将應用部署過程中的相關步驟在 UCD 中進行自動化以及目标環境的管理,對于标準操作,例如:應用版本發現、下載下傳釋出版本、解壓縮檔案、啟動 / 停止 WAS 伺服器等,直接使用 UCD 标準插件完成,而對于應用的部署的特殊需求,則通過插件的定制化開發予以支援。
  2. 應用釋出部署平台支援:本階段将在第一階段的基礎上,對于應用部署提供平台支援,包括應用釋出和部署的資料和狀态同步,應用釋出模式支援,應用釋出過程審計支援,應用釋出報表支援等。

這兩個階段可以根據企業的實際情況進行實施,企業既可以先行實施第一階段,關注于應用部署操作的自動化支援,同時也可以第一階段和第二階段同時實施,以對于應用的釋出和部署提供平台支援。

下面的章節将對持續釋出 / 部署傳遞平台方案進行介紹。

持續釋出 / 部署傳遞平台方案介紹

在持續釋出 / 部署傳遞平台方案中,基礎架構層是應用部署的目标環境,包括傳統硬體平台和雲平台,而流程管控層則是企業已有的流程管控相關系統,如:項目管理系統、釋出管理系統等,本章節将不再進行詳述,我們将重點介紹流水線工具平台層和流水線引擎層。

圖 2 是持續釋出 / 部署傳遞平台方案支援的一個虛拟的應用釋出工作流。我們将基于該工作流對方案進行介紹。

圖 2. 應用釋出工作流

金融行業 DevOps 解決方案,第 5 部分 DevOps 實施之企業級的統一釋出平台
  1. 初始化應用

    一個應用在使用平台進行釋出之前,需要進行應用的初始化,應用初始化包括兩部分:

    注:對于應用、元件、環境、資源、流程等概念,以及如何在 UCD 中進行應用初始化,可參考 UCD 資訊中心。

    1) 在部署平台(UCD)中進行應用的初始化:本操作通常由釋出管理者在 UCD 中進行相應的初始化及配置,包括:建立應用及對應用部署的目标環境進行初始化(圖 3),建立元件(獨立可部署單元)及版本導入資訊配置的初始化(圖 4),部署流程設計,資源的初始化等。

    2) 在應用持續釋出門戶進行應用的初始化:本操作可以由釋出管理者或者開發人員進行配置,主要針對應用釋出和部署的管理資訊進行初始化操作,包括:應用的釋出模式、應用釋出的灰階政策、應用釋出的目标平台及相關資訊,例如:如果應用釋出到 PaaS 平台,以 CloudFoundry 為例,則需要配置應用釋出的目标 Target、Org、Space 等相關資訊。

    圖 3. 應用及目标環境配置

    金融行業 DevOps 解決方案,第 5 部分 DevOps 實施之企業級的統一釋出平台

    點選檢視大圖

    圖 4. 元件配置及版本設定

    金融行業 DevOps 解決方案,第 5 部分 DevOps 實施之企業級的統一釋出平台
    點選檢視大圖
  2. 釋出相關資訊同步

    注:持續釋出 / 部署傳遞平台方案不包含項目管理和釋出管理。

    每個企業都有自己的項目管理、應用釋出管理流程及工具,例如: MS Project、Oracle P6、Visual Project、Workflow Max、CA PPM、ITIL 等等。持續釋出 / 部署傳遞平台從相關資訊系統同步項目及釋出相關資料,進而在應用釋出 / 部署過程中支援相關角色(項目經理、開發人員、上線管理者等)完成應用的釋出 / 部署操作。項目管理和釋出的相關資訊同步采用定時批量同步機制和實時資料擷取機制,同步技術可以根據企業使用的工具而異,如使用 REST API 或者其他技術。

  3. 建立投産任務

    當一個項目在開發或者測試階段進行部署時,或者一個項目完成開發和測試進行上線投産時,上線管理者可以對相應的項目及産品建立投産任務,包括設定待部署 / 釋出的應用元件、設定待部署 / 釋出的元件版本、待部署 / 釋出的目标環境、設定待部署 / 釋出的應用的部署流程,進而在開發團隊成員确認應用元件可釋出的情況下,可以進行應用的釋出。

    應用初始化時涉及的應用、元件、環境、部署流程均為上線管理者在 UCD 中進行應用初始化後的相關資訊,而元件版本則是根據上線管理者在 UCD 中對于元件的設定,由 UCD 自動發現的,包括從 artifactory 中自動導入或者從其他版本存儲庫中自動發現。相關資訊由應用持續釋出門戶通過 REST API 從 UCD 中自動擷取,并供上線管理者完成設定。

  4. 認領待釋出元件并确認元件可釋出

    對于開發和測試階段的應用部署,本步驟為可選步驟,通常開發和測試階段的應用部署由應用開發團隊成員發起,故不需要開發人員對于所負責應用元件進行認領。而對于應用上線投産,通常需要開發團隊、業務人員、項目管理團隊、運維團隊等通過協作完成應用的上線操作。對于一些相對複雜的上線,例如上線應用之間存在依賴關系,不同應用同時上線但存在不同的釋出視窗等,則通常需要支援應用上線的開發團隊成員對所負責的應用及元件進行認領,在确認所依賴的應用元件釋出完成後對所負責的應用及元件進行可釋出确認,運維團隊可以在開發團隊成員确認的情況下執行應用的自動化部署操作。

    本操作可以通過開發團隊上線負責人進行人工确認,而如果企業及組織對于相關資訊已經進行管理,例如:每次應用釋出對應的開發團隊上線負責人資訊,應用釋出之間的依賴資訊等,則本操作可以通過自動化方式實作。

  5. 應用釋出

    在開發團隊上線負責人确認應用元件可釋出之後,上線管理者可以執行應用元件的自動化釋出操作,而自動化釋出操作由投産任務中設定的待上線應用元件、版本、目标環境、自動化部署流程确定,應用持續釋出門戶通過REST API将相關資訊發送到UCD進而調用應用的自動化釋出流程完成應用的自動化部署/釋出操作。。

  6. 應用釋出驗證

    應用自動化部署完成,上線管理者、開發人員可以檢視 UCD 中對應的流程運作日志,應用部署成功,技術人員對進行技術驗證,技術驗證通過則交由業務人員完成業務驗證。如果應用支援灰階釋出,則業務驗證通過之後,上線管理者繼續釋出該應用的其他環境直到所有環境釋出完成。

    對于開發和測試階段的驗證,通常由開發人員或者測試人員針對部署的應用版本進行相關測試。

    圖 5. 釋出頁面

    金融行業 DevOps 解決方案,第 5 部分 DevOps 實施之企業級的統一釋出平台
    點選檢視大圖
  7. 應用釋出跟蹤

    在應用釋出的過程中,應用釋出的相關幹系人如項目負責人、流程管控人員等需要跟蹤應用釋出的實時狀态,進而確定在應用釋出過程中,應用釋出狀态對所有幹系人可見且資訊一緻。在應用釋出過程中出現任何問題,各幹系人可以更友善地進行協作以解決問題。

此外,應用持續釋出門戶提供釋出過程洞察功能,對于應用釋出的查詢、報表分析等提供支援。

方案實施收益

如本系列方案的其他方案,持續部署 / 釋出平台方案已經在部分金融企業進行實施,有效解決了客戶在應用部署 / 釋出領域所存在的問題:

  • 應用部署 / 釋出效率低下:通過引入 UCD 進行應用的自動化部署支援,進而解決了應用部署 / 釋出手工操作所帶來的效率問題,應用的部署 / 釋出效率得到了有效的提升。例如:使用方案之前,某應用釋出需要手工在超過 10 台目标伺服器上操作多達 16 步的部署操作,而引入方案後 UCD 自動完成所有目标環境的部署相關操作。
  • 應用部署 / 釋出風險居高不下:相較于手動進行應用的部署 / 釋出,自動化部署在提升效率的同僚,有效地降低了應用部署 / 釋出過程中由于手工操作所帶來的釋出風險,同時釋出過程相關資訊的內建,也幫助應用釋出相關人員有效地降低了釋出過程由于流程管控缺失所引起的應用釋出失敗風險。
  • 應用部署 / 釋出協作效率低下:引入本方案之前,開發、測試、運維各自為政,應用部署 / 釋出資産重用性低,存在同一應用在不同階段釋出不一緻的問題,同時由于各個角色關注于自己的職責範圍,溝通和協作效率低下。通過本方案的引入,應用部署 / 釋出整個過程對于各個階段及角色透明,進而有效地保證了應用部署 / 釋出資産的跨階段重用,以及在應用投産過程中,各角色之間的有效協作。

繼續閱讀