TFS2017持续发布中调用PowerShell启停远程应用程序
目前團隊項目中有多個Web、服務(wù)以及與大數(shù)據(jù)平臺對接接口等應(yīng)用,每次的發(fā)布和部署采用手工的方式進(jìn)行。停止應(yīng)用程序,拷貝發(fā)布包,啟動應(yīng)用程序,不停的循環(huán)著,并且時不時地會出現(xiàn)一些人為錯誤性問題。這種模式消耗的很多團隊時間和精力。
為了解決該問題,決定引入自動構(gòu)建和持續(xù)部署的一些輔助工具,采用的是微軟公司的TeamFoundationServer2017,并把DevOps相關(guān)模式推廣到團隊中。
在這個過程中,有一系列已遇到或會將遇到的問題需要解決,作為一個整理和記錄,希望以后可以快速處理類似的問題。
在我們的應(yīng)用中,有一個數(shù)據(jù)計算和文件上傳入庫計算的兩個Self-Host WCF服務(wù),服務(wù)運行在多個服務(wù)器上,每臺服務(wù)器運行一個或多個服務(wù)實例進(jìn)行著大量和較長時間的計算服務(wù)。服務(wù)以控制臺的形式運行在WindowServer2012 R2系統(tǒng)上,并提供一些數(shù)據(jù)計算過程信息的過程步驟監(jiān)控信息?;谶@樣的操作環(huán)境和應(yīng)用服務(wù)類型,使用Invoke-Command等方式,因為操作系統(tǒng)內(nèi)權(quán)限等問題,是無法正常啟動遠(yuǎn)程機器上帶有界面的應(yīng)用程序的,通常是進(jìn)程啟動了但是沒有應(yīng)用的交互界面(比如啟動遠(yuǎn)程服務(wù)上的計算器)。針對這樣的應(yīng)用,下面是我采用實現(xiàn)停止、發(fā)布和啟動服務(wù)過程的一些具體實現(xiàn)方法。
實現(xiàn)這個發(fā)布流程需要兩個PowerShell腳本,一個應(yīng)用在構(gòu)建服務(wù)Agent服務(wù)器上,負(fù)責(zé)完成對分發(fā)服務(wù)器的認(rèn)證授權(quán)和指令發(fā)送,另一個運行在服務(wù)所運行在的服務(wù)上,負(fù)責(zé)啟動和關(guān)閉服務(wù)器上的Self-Host應(yīng)用程序。TFS構(gòu)建代理上通過調(diào)用代理服務(wù)上的腳本,實現(xiàn)基本認(rèn)證和授權(quán),傳遞命令到服務(wù)寄宿的服務(wù)上,并調(diào)用腳本完成應(yīng)用程序的啟動和停止。
構(gòu)建服務(wù)器上的腳本文件1
1 param( 2 [string]$applicationName = '**.Service.WebSocketHost', 3 [string]$switchType = 'on', 4 [string]$account = "administrator", 5 [string]$password = "111", 6 [string[]]$computername="10.0.0.102", 7 [string]$applicationType ="UploadHost" 8 ) 9 10 Write-Host 'ApplicatnonName:' $applicationName 11 Write-Host 'SwithType:' $switchType 12 Write-Host 'Account:' $account 13 Write-Host 'Password:' $password 14 Write-Host 'IP:' $computername 15 16 $secpwd = convertto-securestring $password -asplaintext -force 17 $cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd 18 19 $session_many = new-pssession -computername $computername -Credential $cred 20 if( $applicationType -eq "WebSocketHost") 21 { 22 if($switchType -eq 'on') 23 { 24 Invoke-Command -Session $session_many -ThrottleLimit 1 -ScriptBlock { C:\CICD\ExecutedAppManagement.ps1 -applicationName 'C:\ODWebSocketHost\ Service.WebSocketHost.exe' -switchType 'on' -applicationType 'WebSocketHost' } 25 } 26 if($switchType -eq 'off') 27 { 28 Invoke-Command -Session $session_many -ThrottleLimit 1 -ScriptBlock { C:\CICD\ExecutedAppManagement.ps1 -applicationName 'Service.WebSocketHost' -switchType 'off' -applicationType 'WebSocketHost' } 29 } 30 }?
?
?
服務(wù)器端的腳本文件2,
腳本文件1中對應(yīng)ExecutedAppManagement.ps1文件名
?
1 param( 2 [string]$applicationName = 'applicationName', 3 [string]$switchType = 'on', 4 [string]$applicationType = 'WebSocketHost' 5 ) 6 Write-Host $switchType 7 8 if($switchType -eq "on") 9 { 10 Write-Host "Turn on App!" $applicationName 11 #開啟WebSocket應(yīng)用程序 12 if($applicationType -eq 'WebSocketHost') 13 { 14 $registerTask = Get-ScheduledTaskInfo -TaskName "TaskODWebSocketHost" 15 if( !$registerTask) 16 { 17 Write-Host $registerTask 18 $taskAction = New-ScheduledTaskAction $applicationName #"C:\ODWebSocketHost\Service.WebSocketHost.exe" 19 $taskTrigger = New-ScheduledTaskTrigger -AtStartup 20 Register-ScheduledTask TaskODWebSocketHost -Action $taskAction -Trigger $taskTrigger 21 } 22 Start-ScheduledTask -TaskName "TaskODWebSocketHost" 23 } 24 25 } 26 if($switchType -eq "off") 27 { 28 Write-Host "Turn off App!" $applicationName 29 stop-process -name $applicationName 30 Write-Host $applicationName + "has turn off" 31 }?
控制過程
首先需要在構(gòu)建代理服務(wù)器上添加對應(yīng)用寄宿服務(wù)器上的信任
Set-Item wsman:\localhost\Client\TrustedHosts -value 10.0.0.*
將腳本文件2拷貝的應(yīng)用寄宿服務(wù)器上指定的違章。
通過調(diào)用腳本文件1,并傳遞適當(dāng)?shù)膮?shù)實現(xiàn)對Sefl-Host服務(wù)器的啟??刂啤?/p>
最后將調(diào)用腳本文件1的命令集成到TFS2107的發(fā)布定義中,實現(xiàn)對類似Windows環(huán)境上運行的帶有交互界面的應(yīng)用程序進(jìn)行啟動、發(fā)布和停止控制。下圖是持續(xù)發(fā)布結(jié)果
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jlw123199/p/8005385.html
總結(jié)
以上是生活随笔為你收集整理的TFS2017持续发布中调用PowerShell启停远程应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java合并单元格同时导出excel
- 下一篇: orcal数据操作