Я потратил немало времени, ударяя головой об этом. Маленький StackOverflow поможет, хорошие люди!teamcity powershell - не удалось запустить командный файл
Сценарий: Мы пытаемся запустить пользовательский .bat-файл, расположенный на сервере CI, с помощью шага TeamCity Powershell.
- Когда скрипт powershell запускается на локальном поле вручную, он правильно запускает .bat-файл.
- Когда скрипт PowerShell запускается через TeamCity, он успешно «видит» файл .bat (подкрепленная получения ответа «не может найти файл», когда я переименовать .bat файл, он ожидает)
- ОДНАКО, мы не имеем видел какой-либо признак того, что файл .bat был фактически запущен.
Что мы пытались:
- Мы добавили «RedirectStandardOutput» и «RedirectStandardError» для попытки диагностировать, но хотя файл журнала создается, он возвращается пустым.
- Мы предоставили права доступа к файлу и выполнили два разных учетных данных, включая учетные данные агента сборки TC.
- Добавлен «-wait» в какой-то момент, чтобы узнать, нужно ли нам «сообщать» PS, чтобы ждать файл .bat ,
Два вопроса ...
- Что мешает нам продолжить этот .bat файл?
- Как мы можем диагностировать такие проблемы? Банкомат - это «черный ящик» для нас. настройки
TeamCity Powershell:
- Powershell режим Run: Версия 1.0; Разрядность x64 (x86 пробовал, а)
- Working Directory: Пробовал, как пустые, и конкретный путь_к_файл из BAT-файла (так, 'D: \ папки \ folder2 \')
- Сценария: Исходный код Execution
- Script : Выполнить .ps1 из внешнего файла (опробованы 'Put сценария в PowerShell стандартного ввода с "-command -" аргумент' а)
- Добавить -NoProfile аргумент (пробовал и)
Powershell скрипт:
#Predefine necessary information
$Username = "DOMAIN\username"
$Password = "password"
$ComputerName = "CI Build Server Name"
#Create credential object
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord
#Start batch file
Start-Process "testbat.bat" -WorkingDirectory D:\file\path\ -Credential ($Cred)-NoNewWindow -RedirectStandardError stderr.txt -RedirectStandardOutput stdout.txt
Write-Host "Executed powershell."
UPDATE 1: Если мы удалим часть '-Credential ($ Cred), мы сможем запустить файл testbat.bat из TeamCity, как и ожидалось. Проблема должна быть связана с этим аргументом «-Credential ($ Cred)». Есть предположения?
UPDATE 2: Если мы установим часть '-Credential ($ Cred)' для учетных данных пользователя агента сборки, мы сможем запустить файл test.bat из TeamCity. Проблема возникает только тогда, когда мы устанавливаем учетные данные для пользователя, отличного от того, на котором работает агент сборки. Кажется, это указывает на то, что синтаксис учетных данных в порядке.
ОБНОВЛЕНИЕ 3: Пробовал работать с PowerShell, выполняющим политику, на «RemoteSigned» и «Unrestricted». Проблема сохраняется.
UPDATE 4: Дал пользователю BuildAgent, и пользователь, которого мы хотим запустить это как, полные права доступа к Powershell с помощью «Set-PSSessionConfiguration». Проблема сохраняется.
Hi Soheil, я сначала протестировал это изменение синтаксиса на своем локальном скрипте, и он функционировал так же, как и раньше. Затем я сделал изменение в шаге powersaill teamcity, и байт все еще не стартовал. Одно из отличий заключалось в этом изменении синтаксиса: «stderr.txt» и «stdout.txt» не создаются. Раньше они были созданы пустыми. – ECD
Я проверил снова работает какая команда существует в вашей битой? – powershell
"echo"% username% "> D: \ path \ path \ log.txt"; Каковы ваши настройки шага powershell? – ECD