初創(chuàng)型公司-持續(xù)部署系列(九)測(cè)試環(huán)境的持續(xù)交付

測(cè)試環(huán)境沒有像生產(chǎn)環(huán)境的流程那么多,步驟那么嚴(yán)謹(jǐn)。講究的是發(fā)布速度快,快速呈現(xiàn)給開發(fā)/測(cè)試一個(gè)環(huán)境出來(lái)。

測(cè)試環(huán)境持續(xù)交付的流程:

Paste_Image.png

本實(shí)例用得是192.168.77.140作為測(cè)試服務(wù)器,后端數(shù)據(jù)庫(kù)不做考慮,iis站點(diǎn)配置不做說(shuō)明。

git倉(cāng)庫(kù)目前存在3個(gè)分支:

  • master
  • dev-pages
  • release-1.0

測(cè)試服務(wù)器配置

在測(cè)試服務(wù)器上創(chuàng)建目錄

  • D:\test\Packages 用來(lái)存放jenkins發(fā)來(lái)的壓縮文件
  • D:\tools 用于存放工具

允許192.168.77.* 網(wǎng)段的主機(jī)遠(yuǎn)程執(zhí)行winrm

Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.77.*
winrm quickconfig

jenkins配置

** 安裝插件**

  • Git Parameter Plug-In 動(dòng)態(tài)獲取git倉(cāng)庫(kù)中得分支目錄

** 在jenkins服務(wù)器上創(chuàng)建目錄**

  • D:\build_code\demo,用于存放編譯后的代碼
  • D:\test\Packages,用于存放代碼壓縮文件
  • D:\tools,用于存放工具

** 創(chuàng)建一個(gè)名為192.168.77.140-test 視圖**

Paste_Image.png

目的是為了區(qū)分多個(gè)測(cè)試環(huán)境的任務(wù)。一個(gè)測(cè)試環(huán)境的發(fā)布任務(wù)都放在一個(gè)視圖中。

** 在192.168.77.140-test 視圖下創(chuàng)建一個(gè)名為Build-deploy_demo_140的任務(wù)**

Paste_Image.png

** 配置參數(shù)化構(gòu)建**

選擇參數(shù)化構(gòu)建,點(diǎn)擊添加參數(shù),選擇Git Parameter

Paste_Image.png
Paste_Image.png

** 配置源碼管理**

Paste_Image.png

** 配置編譯腳本**

Paste_Image.png
/t:clean /t:rebuild /p:Configuration=release  /p:WebProjectOutputDir=d:\test\build_code\demo /p:OutputPath=d:\test\build_code\demo\bin

** 配置編譯發(fā)布腳本**

Paste_Image.png
function GetRequest($url)
{
    $request = [System.Net.HttpWebRequest]::Create($url)
    $response = [System.Net.HttpWebResponse]$request.GetResponse()
    $code = [System.Int32]$response.StatusCode
    $response.Close()
    Write-Host '[-] HTTP 狀態(tài)嗎: ' $code
}

$datetime=Get-Date -Format 'yyyyMMddHHmmss'
#Predefine necessary information
$ComputerName = "192.168.77.140"     # 遠(yuǎn)端地址
$Username = "administrator"         # 用戶名
$Password = "123456"         # 密碼

Write-Host '[-] 清空上傳目錄'
Remove-Item D:\test\Packages\*  -force -recurse

Write-Host '[-] 打包文件'
D:\tools\7z.exe a D:\test\Packages\demo-$datetime.7z D:\test\build_code\demo\*

#Create credential object
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord

#Create session object with this
$Session = New-PSSession -ComputerName $ComputerName -credential $Cred

Write-Host '[-] 清空部署服務(wù)器的上傳目錄'
Invoke-Command -Session $Session -ScriptBlock {Remove-Item D:\test\Packages\*  -force -recurse}

Copy-Item "D:\test\Packages\demo-*.7z" -Destination "\\$ComputerName\d$\test\Packages\"
Write-Host $ComputerName  '文件 【傳送完畢】' 

Write-Host '[-] 關(guān)閉iis站點(diǎn)'
Invoke-Command -Session $Session -ScriptBlock {cmd /c "%windir%\system32\inetsrv\appcmd.exe stop site demo"}

Write-Host '[-] 關(guān)閉應(yīng)用程序池'
Invoke-Command -Session $Session -ScriptBlock {cmd /c "%windir%\system32\inetsrv\appcmd.exe stop site demo"}

Write-Host '[-] 關(guān)閉iis站點(diǎn)'
Invoke-Command -Session $Session -ScriptBlock {cmd /c "%windir%\system32\inetsrv\appcmd.exe stop apppool demo"}

Write-Host '[-] 清空部署服務(wù)器的iis站點(diǎn)目錄'
Invoke-Command -Session $Session -ScriptBlock {Remove-Item D:\iis_sites\demo\*  -force -recurse}

Write-Host '[-] 解壓文件至iis站點(diǎn)目錄’
Invoke-Command -Session $Session -ScriptBlock {cmd /c "cd /d D:\iis_sites\demo\ && D:\tools\7z.exe x D:\test\Packages\*.7z"}

Write-Host '[-] 開啟應(yīng)用程序池'
Invoke-Command -Session $Session -ScriptBlock {cmd /c "%windir%\system32\inetsrv\appcmd.exe start apppool demo"}

Write-Host '[-] 開啟iis站點(diǎn)'
Invoke-Command -Session $Session -ScriptBlock {cmd /c "%windir%\system32\inetsrv\appcmd.exe start site demo"}

#Close Session
Remove-PSSession -Session $Session

GetRequest 'http://192.168.77.140'

測(cè)試構(gòu)建

點(diǎn)擊任務(wù)的Build with Parametes, 選擇dev-pages分支編譯發(fā)布

Paste_Image.png

構(gòu)建日志

Started by user admin
Building in workspace C:\Program Files (x86)\Jenkins\workspace\Build-deploy_demo_140
Cloning the remote Git repository
Cloning repository https://git.oschina.net/lework/Webdemo.git
 > C:\Program Files\Git\bin\git.exe init C:\Program Files (x86)\Jenkins\workspace\Build-deploy_demo_140 # timeout=10
Fetching upstream changes from https://git.oschina.net/lework/Webdemo.git
 > C:\Program Files\Git\bin\git.exe --version # timeout=10
using GIT_ASKPASS to set credentials 
 > C:\Program Files\Git\bin\git.exe fetch --tags --progress https://git.oschina.net/lework/Webdemo.git +refs/heads/*:refs/remotes/origin/*
 > C:\Program Files\Git\bin\git.exe config remote.origin.url https://git.oschina.net/lework/Webdemo.git # timeout=10
 > C:\Program Files\Git\bin\git.exe config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > C:\Program Files\Git\bin\git.exe config remote.origin.url https://git.oschina.net/lework/Webdemo.git # timeout=10
Fetching upstream changes from https://git.oschina.net/lework/Webdemo.git
using GIT_ASKPASS to set credentials 
 > C:\Program Files\Git\bin\git.exe fetch --tags --progress https://git.oschina.net/lework/Webdemo.git +refs/heads/*:refs/remotes/origin/*
 > C:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/dev-pages^{commit}" # timeout=10
 > C:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/origin/dev-pages^{commit}" # timeout=10
Checking out Revision 7a1ffd4d8688273f537ef556d4a2c761181475a6 (refs/remotes/origin/dev-pages)
 > C:\Program Files\Git\bin\git.exe config core.sparsecheckout # timeout=10
 > C:\Program Files\Git\bin\git.exe checkout -f 7a1ffd4d8688273f537ef556d4a2c761181475a6
 > C:\Program Files\Git\bin\git.exe rev-list 7a1ffd4d8688273f537ef556d4a2c761181475a6 # timeout=10
Path To MSBuild.exe: C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe
Executing the command cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe" /t:clean /t:rebuild /p:Configuration=release /p:WebProjectOutputDir=d:\test\build_code\demo /p:OutputPath=d:\test\build_code\demo\bin /p:version=origin/dev-pages Webdemo.sln " && exit %%ERRORLEVEL%% from C:\Program Files (x86)\Jenkins\workspace\Build-deploy_demo_140
[Build-deploy_demo_140] $ cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe" /t:clean /t:rebuild /p:Configuration=release /p:WebProjectOutputDir=d:\test\build_code\demo /p:OutputPath=d:\test\build_code\demo\bin /p:version=origin/dev-pages Webdemo.sln " && exit %%ERRORLEVEL%%
Microsoft (R) 生成引擎版本 14.0.23107.0

....(編譯日志)

已成功生成。
    0 個(gè)警告
    0 個(gè)錯(cuò)誤

已用時(shí)間 00:00:37.51
[Build-deploy_demo_140] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\ADMINI~1\AppData\Local\Temp\hudson1881669104991386343.ps1'"
[-] 清空上傳目錄
[-] 打包文件
7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

Scanning the drive:
15 folders, 161 files, 43669548 bytes (42 MiB)

Creating archive: D:\test\Packages\demo-20161217123320.7z

Items to compress: 176


Files read from disk: 161
Archive size: 6849624 bytes (6690 KiB)
Everything is Ok
[-] 清空部署服務(wù)器的上傳目錄
192.168.77.140 文件 【傳送完畢】
[-] 關(guān)閉iis站點(diǎn)
“demo”已成功停止
[-] 關(guān)閉應(yīng)用程序池
“demo”已成功停止
[-] 關(guān)閉iis站點(diǎn)
“demo”已成功停止
[-] 清空部署服務(wù)器的iis站點(diǎn)目錄
[-] 解壓文件至iis站點(diǎn)目錄

7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

Scanning the drive for archives:
1 file, 6849624 bytes (6690 KiB)

Extracting archive: D:\test\Packages\demo-20161217123320.7z
--
Path = D:\test\Packages\demo-20161217123320.7z
Type = 7z
Physical Size = 6849624
Headers Size = 2698
Method = LZMA2:24 BCJ
Solid = +
Blocks = 2

Everything is Ok

Folders: 15
Files: 161
Size:       43669548
Compressed: 6849624
[-] 開啟應(yīng)用程序池
“demo”已成功啟動(dòng)。
[-] 開啟iis站點(diǎn)
“demo”已成功啟動(dòng)。
[-] HTTP 狀態(tài)嗎:  200
Finished: SUCCESS
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容