2013-04-03 222 views
3

我有一個奇怪的問題,只要我嘗試遠程調用我們的測試服務器,TeamCity就會掛起。Teamcity powershell亞軍遠程運行服務器上的命令

目前構建的步驟是:

  • 模板文件
  • 編譯代碼
  • 包項目
  • 發送軟件來測試服務器
  • 解壓縮封裝測試服務器上

現在一切正常,直到最後階段,解壓縮遠程服務器上的軟件包。現在我想運行一個powershell命令來連接並運行命令,然後退出。如果我使用遠程桌面的powershell,並且所提供的用戶憑據是正確的,這一切都可以正常工作。

什麼正在運行的下面是一個例子:

$password = ConvertTo-SecureString "%PasswordVar%" -AsPlainText -Force 
$credentials = New-Object System.Manager.Automation.PsCredential("%UsernameVar%", $password) 
etsn -computername %TestServer1Var% -Credential $credentials 

當這個被稱爲TeamCity的只是掛起,它必須是手動停止,否則它將停留在代理上的這一步,直到永遠。我已經嘗試不使用憑據,我試過不使用etsn並使用完整的命令名稱,也嘗試了其他遠程命令方法,似乎沒有任何工作。

那麼有沒有辦法讓TeamCity真正運行命令?或者找出是什麼導致它無限期地處理這一步驟?

+1

您是否嘗試過'AllowRedirection'參數設置?這將使您的腳本記錄您在交互式控制檯中看到的命令運行的詳細信息。 –

+0

都能跟得上現在這個參數添加到命令,看看它是否提供了更多的信息 – Grofit

+0

補充參數呼叫,但它仍然只是掛起,它一直在10分鐘內沒有給我任何更多的反饋的最後一步了。 – Grofit

回答

5

這是小問題混合,1用戶在通過球隊的城市查詢並沒有解決正確因此這需要被添加到用戶名[email protected]域。還有一個問題,那就是在執行PSSESSION連接時遇到了某種連接限制,但是如果我通過腳本塊更改爲Invoke-Command,它的工作正常。

如果它幫助任何人這裏是我最終解開一個遠程文件的命令,使用7zip命令行作爲本地解決方案似乎從來沒有工作。

$password = ConvertTo-SecureString "%TestServer.Password%" -AsPlainText -Force 
$credentials = New-Object System.Management.Automation.PsCredential("%TestServer.Username%",$password) 

$scriptBlock1 = {` 
` 
    $sevenZip = "%TestServer.ReleasePath%\7za.exe"; ` 
    &$sevenZip x %TestServer.ReleasePath%\web-package.zip -o%TestServer.WebPath% * -aoa; ` 
} 
Invoke-Command -computername %TestServer.Server% -Credential $credentials -scriptblock $scriptBlock1 

有一點要記住的是,用戶名包含域上面列出,還需要在魔術引號,以允許通過傳輸線傳播的腳本塊還有分號指示的任務應該是一起跑步。

0

Invoke-Command如果您必須在服務器上運行的腳本很短並且您必須等待它完成執行,才能正常工作。

我的問題是,我想在遠程服務器上啓動一個服務,只記錄服務器內的東西,讓teamcity構建繼續執行。 由於Invoke-Command,teamcity確實遠程執行了這個過程,但一直等待該過程完成。如果你正在尋找的東西,只是調用服務器上的一個長期運行的進程,並忘掉它,試試這個:

該解決方案爲我工作最好的:

1)將被遠程執行的腳本,在服務器中的文件..讓我們說啓動。蝙蝠

call Powershell.exe -executionpolicy remotesigned -File %1\bin\startup.ps1 

這基本上執行位於Web服務器的另一個PowerShell腳本。

Start-Process -WindowStyle hidden java -ArgumentList '-jar', "$APP_HOME\bin\test-api.jar" -PassThru 

確保有一個teamcity構建步驟將這些文件部署到Web服務器。

2)創建的TeamCity生成步驟執行PowerShell腳本文件

樣品PowerShell命令由TeamCity的執行:

$SERVER = (Get-Item env:SERVER_NAME).Value 
$APP_HOME = (Get-Item env:APP_HOME).Value 
$STARTUP_SCRIPT_PATH = "$APP_HOME\bin\startup.bat" 

Function Remote-Process { 
    param(
    [string]$ComputerName, 
    [string]$Cmd 
) 

    echo "Invoking Remote Script.." 
    $RETURNVAL = ([WMICLASS]"\\$ComputerName\ROOT\CIMV2:win32_process").Create($Cmd) 
    echo $RETURNVAL 
} 

$COMMAND = "$STARTUP_SCRIPT_PATH $APP_HOME" 
$output = Remote-Process $SERVER $COMMAND 

echo $OUTPUT 

哪裏APP_HOME是到該文件夾​​的絕對路徑(在遠程塞雷爾語)您的Web應用程序的部署位置。

這就是它。這樣,您甚至可以執行服務,並且遠程進程不會被終止並讓您繼續構建鏈。

相關問題