2013-04-03 2 views
3

У меня странная проблема, когда TeamCity просто зависает, когда я пытаюсь выполнить удаленный вызов на одном из наших тестовых серверов.Teamcity powershell runner для удаленного запуска команд на сервере

В настоящее время шаги сборки являются:

  • файлы шаблонов для
  • компилировать код в
  • проект Пакет
  • Отправить пакет для тестовых серверов
  • Распакуйте пакет на тестовых серверах

Теперь все работает до последней стадии, распаковывая пакет на удаленном сервере. Теперь я хотел просто запустить команду 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

Nope добавит этот аргумент в команду сейчас и посмотрит, дает ли он больше информации. – Grofit

+0

Добавил этот параметр к вызову, но он все еще просто зависает, он был на последнем шаге в течение 10 минут, не давая мне больше обратной связи. – Grofit

ответ

5

Это было небольшое количество проблем, так как пользователь, когда пользователь спрашивал через город команды, не правильно разрешал домен, поэтому это необходимо было добавить к имени пользователя [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 команда team выполняла этот процесс удаленно, но продолжала ждать завершения этого процесса. Если вы ищете что-то, что просто вызывает длительный процесс, запущенный на сервере и забывает об этом, попробуйте следующее:

Это решение работает лучше для меня:

1) Поместите скрипт будет выполняться удаленно, в файле на сервере .. позволяет говорить о запуске.bat

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

Это в основном выполняет другой скрипт powershell, расположенный на веб-сервере.

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

Удостоверьтесь, что есть команда Teamcity Построить шаг для развертывания этих файлов на веб-сервере.

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 абсолютный путь к папке (на пульте серер), где развернуто ваше веб-приложение.

Это примерно. Таким образом, вы даже можете выполнять службы, и удаленный процесс не будет убит и позволит вам продолжить цепочку сборки.

Смежные вопросы