[Jenkins]持續整合之路(十一)Jenkins加入Slave作自動佈署(Copy Artifact plugin)

.NET專案完成建置、掃描及測試等等等的持續整合程序後,下一步就到了過版到QA環境的佈署階段了,要佈署到IIS的Web專案可以靠Web Deploy單鍵佈署建立的發行組態與Jenkins直接整合,透過web deploy(8172)直接佈署到WEB Server的IIS。但遇到Windows Service或是其他執行檔專案時,就稍微麻煩一點。這次我們在Jenkins Master作建置並且產生發行成品,但佈署時,直接從測試機連回Jenkins Master取得封裝成品來作版本更新。

 

持續整合之路進入到過版程序: 

*Release管理容後再補。

 


1.前置條件確認

2.Jenkins Master設定

3.Master新增Slave節點

4.Slave伺服器設定

5.Jenkins安裝Copy Artifact plugin

6.現有CI作業封裝成品

7.新增CI作業Slave複製成品並進行佈署

 


(1)前置條件:

Slave server已安裝好了JRE環境

下載網址: https://java.com/zh_TW/download/

按下安裝按鈕

安裝完畢。

 


(2)Jenkins Master設定

管理Jenkins > 設定全域安全性

到Agents區塊,選隨機,按下Agent protocols,設定Java Web Start Agent Protocol/4 TLS encryption

設定完成後,按下儲存。

 


(3)Master新增Slave節點

管理Jenkins > 管理節點

進入管理節點畫面上,新增節點

輸入節點名稱,並選取Permanent Agent後,按下OK

設定遠端檔案系統根目錄及使用方式,最後按下儲存按鈕。

設定完成後會發現多了一台PBT01,不過還沒有連線,我們待會會進入PBT01這台設定。

 


(4)Slave伺服器設定

從PBT01打開瀏覽器連上Jenkins Server,登入管理帳號後,進入PBT01的節點

點橘色的Launch執行。

執行

連接成功後會出現

除了進入以這種方式連線外,還有另外兩種連線方式:

1.在file選項中點選Install as service,安裝成service後,重開機後就不用再連線。

2.也可以用批次指令碼建立連線

指令碼就在剛剛橘色launch按鈕的下方,先把agent.jar下載下來,然後把指令碼改為本機路徑,貼到.bat檔裡頭,最後就是排在固定開機作業中。

回到節點畫面,PBT01也上線了

 


(5)Jenkins安裝Copy Artifact plugin

待會我們要從Master workspace複製編譯結果到slave,因此我們先安裝Copy Artifact

管理Jenkins > 外掛程式管理

安裝完畢後,環境的組態就完成了,剩下就是CI JOB的設定。

 


(6)封存成品

點選現有要封存成品的CI作業 > 組態 > 在建置後動作新增動作 > 封存成品

設定要封存成品的位置,以工作區的相對路徑來看

馬上建置後,可以在console發現 封存成品的訊息。

 


(7)Slave 複製成品並進行佈署(pipeline)

新增一個pipeline(管線、流水線)作業

 

在Build Triggers區塊中先設定觸發的CI作業

我們的條件是testWindowsService作業完成建置及基本單元測試後觸發(也可以設定多個CI作業作為觸發,CI作業名稱以逗號分隔)

由於我們要限制在PBT01執行,撰寫pipeline程式時需要在node加入伺服器名稱的參數PBT01

node('PBT01')

程式分成4個state,分別是取得版本(Jenkins封存成品、TFS發行成品..)、停止服務、過版及啟動服務。

Pipeline語法: 

node('PBT01') {  
   stage('Stage 取得Build版本'){
             script {
                 step ([$class: 'CopyArtifact',
                 projectName: 'TestWindowsService',
                 target: 'Infra']);
             }
   }
   stage('Stage 停止服務'){
       bat 'echo %USERDOMAIN%\\%USERNAME%'
       bat 'powershell.exe "Start-Process powershell -ArgumentList \'-ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File D:\\Jenkins\\StopServices.ps1\' -Verb RunAs"'
       sleep 5
   }
    stage('Stage 服務過版'){
      bat '''xcopy "D:\\Jenkins\\workspace\\WindowsServiceDeploy\\Infra\\TestWindowsService \\bin\\Debug\\*.dll" "D:\\AP\\TestWindowsService\\data\\" /s /d /h /y /I '''
   }
    stage('Stage 啟動服務'){
       bat 'powershell.exe "Start-Process powershell -ArgumentList \'-ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File D:\\Jenkins\\StartServices.ps1\' -Verb RunAs"'
   }
}

 

從CI作業內的Stage View就可以看到每個Stage的狀況

 

每個stage海浪都不同,風景也是

2017.08 北海道 星野渡假村 微笑海灘

 


參考

Step by step guide to set up master and slave machines on Windows

Copy Artifact Plugin

copyArtifacts: Copy artifacts from another project