2

好後自動部署Windows服務,這就是我想做的事 -的MSBuild - 建設

我們有一個窗口服務,我們希望自動化此服務於每一個成功的CI生成後的測試環境的部署 - 爲此,我們認爲下列做法 -

  • 構建Windows服務項目(與依賴沿)
  • 停止Windows服務
  • 複製從輸出文件夾輸出項目到Windows Servi大街CE文件路徑
  • 啓動服務

不過,目前我面臨與Windows服務的啓動和停止的問題。

這是MSBuild的片段 -

<!-- TODO: do this using Powershell instead of normal commandline so that it can be executed on remote machines as well --> 
<Exec Command="Net Stop CreditProcessing" /> 
<!-- Exec Command="$(PowerShellExe) -NoProfile -Noninteractive -command &quot;&amp;{ Stop-Service CreditProcessing }&quot;" /--> 

<!-- TODO: The destination needs to come from the env variable or rsp file? --> 
<Copy 
    SourceFiles="@(WindowsServiceFilesToDeploy)" 
    DestinationFiles="@(WindowsServiceFilesToDeploy->'D:\WindowsServices\Credit Processing Service%(RecursiveDir)%(Filename)%(Extension)')" /> 

<Exec Command="Net Start CreditProcessing" /> 
<!--Exec Command="$(PowerShellExe) -NoProfile -Noninteractive -command Start-Service CreditProcessing" /--> 

此我直接命令行試圖命令以及命令的powershell。

A)這是當我嘗試運行此版本與普通的命令我所面臨的問題 - 服務需要一些時間來啓動/停止和構建不會等待足夠長的時間,並報告錯誤並停止

「...服務無法啓動」。 「服務沒有報告錯誤」

或有時停

時「的服務無法在其存在狀態控制。」

而如果我們立即檢查服務,它將在「開始」階段,並且很快就會進入「開始」階段。任何方式使建設更耐心一點?如果直接從命令提示符運行,該命令不會執行此操作。

B)這是我們所面臨的問題,如果我使用上面的PowerShell命令(目前在片段評論) -

它只是打開在構建日誌PowerShell提示符,然後就什麼也不做 Build stops at powershell doesn't continue

你能否幫助避免這些問題(至少其中之一)?我認爲如果能夠正常運行,PowerShell路由更受推薦,但我願意接受建議。

一對夫婦的其他問題 -

  • 我們要部署的服務(並因此停止和重新啓動)在遠程計算機上(而不是在那裏這個CI構建正在發生其他) - 反正這是可以做到?

  • 有沒有辦法添加檢查服務是否已經運行,只有在運行時才停止?如果停止,我們試圖再次停止,它會給「服務沒有啓動」錯誤

+1

你可以發佈你如何定義$(PowerShell)?在屏幕截圖中進行對照,似乎它在powershell.exe路徑之後注入了換行符。這可以解釋你所看到的行爲。 – JohnL

+0

是的!就是這樣! @JohnL你可以把這個作爲答案,我可以upvote和標記它?! –

+0

完成:)很高興我可以幫助 – JohnL

回答

1

你來啓動命令是這樣的形式:

path\to\powershell.exe 
-arg1 -arg2 

換行符意味着PowerShell中從未收到的參數,所以不知道它有執行Start-Service命令,不知道你不不希望它是互動的。它可能只是等着你告訴它該做什麼。

檢查$(PowerShell)變量,因爲它最後可能有一個換行符。

+0

是的,這正是問題所在。已經把下一行的close標籤沒有意​​識到它被看作一個換行符。 –

1

爲什麼不使用sc.exe具有本地遙控功能?

+0

這是一個有趣的可能性 - 我只是試過它,它不等待服務啓動/停止 - 我仍然希望構建失敗,如果它面臨真正的問題在停止/開始 - 這可能與sc.exe? –

+0

此外,構建需要等到服務停止前複製文件 –

+0

好吧,更新 - 我嘗試使用/等待標誌的停止/啓動命令「開始/等待停止creditprocessing」 - 它再次給出了同樣的問題A)以上(構建不會等待足夠長的時間,並且只是出錯) –