.NET持續集成與自動化部署之路第三篇——測試環境到生產環境的一鍵部署策略(Windows)

Jenkins測試環境到生產環境的一鍵部署策略(Windows)

1、前言

    前面咱們已經初步實現了開發集成環境、測試環境的持續集成(自動化構建、自動化測試、自動化部署)。但生產環境自動化部署遲遲沒有推動。其緣由主要在如下幾個方面:html

  • 還沒有實現部署以前的自動化備份
  • 還沒有實現部署出現問題後的自動化回滾
  • 因爲以前採用FTP上傳部署須要生產環境開放FTP端口存在安全性問題且FTP會由於各類的網速問題,致使站點瞬間掛掉

只要解決以上三個問題,咱們就能夠初步實現生產環境的自動化部署。node

系列文章

.NET實現持續集成與自動化部署1-Jenkinswindows

.NET實現持續集成與自動化部署2-NuGet安全

.NET實現持續集成與自動化部署3-測試環境到生產環境策略服務器

2、實現思路

  1. 利用Jenkins分佈式的特性,其中Jenkins服務器做爲Master服務器,將生產環境(能夠一臺也能夠多臺服務器)做爲Jenkins集羣中的一臺Slave服務器。
  2. 測試環境應該模擬和生產環境的配置和編譯版本保持是Release狀態,且功能已經知足預期發佈需求。
  3. 經過文件複製插件,複製測試環境上的部署文件到生產環境上的jenkins工做空間。
  4. 經過批處理處理不須要覆蓋的文件或者臨時要修改的配置等。
  5. 利用rar備份生成環境上即將要覆蓋的文件,注意命名上遵循必定規律:項目-文件夾-{BuildID}.bak.rar或日期-項目-文件夾-{BuildID}.bak.rar。
  6. 利用批處理進行從jenkins工做空間上把文件複製到站點上,經常使用命令:xcopy。
  7. 若生產環境程序出現問題,由項目經理和運維人員決定是緊急修復bug仍是啓用回滾,回滾則採用批處理命令將備份的文件壓縮回生產環境站點下的目錄內。

經過以上策略能夠實現測試環境到生產環境的一鍵部署,實現了部署前的自動化備份,出現問題的自動化回滾,利用Jenkins Master-Slave特性解決了須要開放FTP端口的的問題,而且將先在測試站點測試好的文件,複製到正式站點上的一個緩衝區,進行預熱配置,以後在本機進行文件替換,速度是至關的快,解決了FTP上傳過程當中網絡問題致使站點掛掉的問題。網絡

缺陷與問題:運維

  1. 生產環境需做爲Jenkins 集羣中的一臺服務器並承擔一部分構建任務,但經過配置此問題可忽略不計
  2. 生產環境需安裝JDK並開啓一個Java服務
  3. 待發現

3、生產環境拓撲圖

image

4、所需Jenkins插件

  1. Copy data to workspace plugin 插件
  2. Copy Artifact Plugin
  3. Node and Label parameter plugin 插件

5、實現步驟

  1. 搭建slave

1.1 Jenkins系統管理-->管理節點-->新建節點
!image
image分佈式

1.2 輸入節點名稱,next,配置以下圖
image工具

其中,有以下幾點須要注意:測試

  • 【# of executors】根據CPU的個數來填寫數量

  • 【遠程工做目錄】這個就是用來存放master到slave時,存放的臨時目錄,如slave的服務軟件也會放在此,而且會以每一個job名稱來區分開

  • 【用法】只須要選擇【只容許運行綁定到這臺機器的Job】這種模式下,Jenkins只會構建哪些分配到這臺機器的Job。這容許一個節點專門保留給某種類型的Job。例如,在Jenkins上連續的執行測試,你能夠設置執行者數量爲1,那麼同一時間就只會有一個構建,一個實行者不會阻止其它構建,其它構建會在另外的節點運行。經過這個配置生產環境就能夠僅作本身的構建。

  • 【啓動方式】只須要選擇【Launch agent via Java Web Start】,以服務的方式啓動,應用最廣且最好配置,其他的都太複雜,不建議使用。注意:2.x版本的默認沒有這個選項,須要單獨開啓。其他的基本按照上面默認選擇便可。

Launch agent via Java Web Start開啓方式:

Jenkins-->系統管理-->Configure Global Security-->Agents-->修改成隨機選取
image
image

image

1.3 點擊保存後,master上已經配置好節點,那麼接下來就是到節點的服務器上安裝slave的服務:
點擊右側列表的節點服務器,此時節點並未連通。
image
進入詳情頁面,會提示你如何安裝服務:
image

注意:因爲Slave服務爲Java服務,所以Slave服務器上需安裝JDK

當Slave服務器上出現如下服務時表明安裝並鏈接成功
image
此時回到Jenkins 服務器上查看狀態已經鏈接上
image

說明:這裏只介紹基於現有需求的一種策略,關於Jenkins Master-Slave鏈接機制與原理很少作介紹,網上關於這方面的介紹也不少,你們能夠自行搜索。

  1. 建立生產環境自動化部署任務
    2.1 參數化配置選擇Slave構建
    Jenkins 新建自由風格的軟件項目
    image
    參數化構建-->添加參數-->選擇node
    image
    若沒有此參數安裝Node and Label parameter plugin 插件
    參數化配置可按下圖進行,也可根據須要自行配置
    image

2.2 文本複製
文本複製可選擇兩個插件

Copy data to workspace plugin 插件

能夠複製Jenkins Master服務器的文件到Slave工做空間內
缺點:不支持參數化
Copy Artifact Plugin 插件

能夠實現Jenkins Slave-Slave Master-Slave之間的複製,能夠將一個Job構建後的生成物複製到當前工做空間內
缺點:需再要複製的Job內內配置Archive the artifact

能夠根據所需自行選擇插件,這裏爲了可以參數化咱們選擇Copy Artifact Plugin插件
image
配置說明:

  • Project name:要Copy的項目名稱,這裏可使用參數化
  • Which build:選擇那一次構建後的產物,通常能夠選擇Latest successful build
  • Stable build only:是否選擇穩定的構建
  • Artifacts to copy:要Copy的文件,能夠進行規則匹配,如Test/**/*,即Test文件夾下全部文件
  • Artifacts not to copy:根據規則排除某些文件
  • Target directory:本地工做空間的那個文件夾內
  • Parameter filters:這裏沒用到,用到的話,能夠本身看說明

注意:這裏須要前置Job配置

在要複製的Job內增長構建後操做以下圖:
image

2.3 自動化備份
填寫備份的批處理,這裏可使用WindowsRAR的壓縮命令,因此若是要用RAR的時候,確保機器上已經安裝WindowsRAR。注意名稱必需要有規則且每次構建不能重複,所以可使用項目名稱+BuildID或者日期+項目名稱+BuildID
image

//自動備份批處理命令
start c:\"Program Files"\winrar\rar.exe a -k -r -s -m1
-ag{HS.Shop.My-%BUILD_ID%.bak}  {要備份到的文件夾} {要備份的文件夾}

2.4 覆蓋站點目錄下的文件
備份完成後將Jenkins工做空間下的文件複製到站點目錄下,此時必須保證發佈包已經排除掉了不須要覆蓋的文件,而且是穩定可用的版本。批處理命令可採用xcopy命令。關於xcopy命令的使用能夠自行百度
image

xcopy  {slave工做空間上的項目文件夾} {要複製到替換的文件夾}  /Y/E

到了這一步就完成了生產環境的自動化部署的任務配置。點擊構建便可完成測試環境到生產環境的一鍵部署。此時若程序出現問題能夠採用緊急修復或者自動化回滾。

  1. 建立生產環境自動化回滾任務

3.1 一樣新建一個自由風格的軟件項目
這裏能夠配置兩個構建參數

1.回滾哪個項目的哪一次構建

2.回滾哪一臺服務器的構建(能夠多臺)

參數化配置可見下圖
image

3.2 自動化回滾批處理
image

Setlocal enabledelayedexpansion
set "projectKey=ChioceBuild"
set "bakUrl=D:\HS.Shop.Bak\HS.Shop.My\"  //備份文件的路徑
set url="%ChioceBuild%"                  //參數
set "rollbackUrl=D:\"
set "projectName="
set "buildID="
set url=%url::=/%
set url=%url:///=/%
set url=%url://=/%

for /f "tokens=1,2,3,4,5,6,7,8* delims=/" %%a in (%url%) do (
 set "projectName=%%g"
 set "buildID=%%h"
)
set projectName=!projectName:%projectKey%=!
set "fileName="

for %%a in (%bakUrl%%projectName%-%buildID%.bak.rar) do (
 set "fileName=%%a"
)
c:\"Program Files"\winrar\rar.exe x -ep2 -o+- %fileName% %rollbackUrl%

點擊保存便可完成自動化回滾任務的創建,點擊構建選擇參數便可進行回滾。

6、結束語

    Jenkins是一個持續集成工具,其功能很是強大,能夠幫助咱們作自動構建、自動測試、自動發佈等等,它根據不一樣的需求實現各類各樣的功能,它能夠最大幅度的減小咱們平常工做中重複性的工做。以上僅僅是我根據當下所需研究的一種使用策略,可能有漏洞,也可能存在問題,但若是不肯意嘗試着去改進現有流程,去接受新的東西,那麼咱們永遠不會進步。而我對其使用的瞭解也不過是九牛一毛,你們能夠根據需求研究制定本身的使用策略。     最後但願你們:即便搬磚,也要搬出藝術感!作一個有追求的搬磚者!

相關文章
相關標籤/搜索