Я потратил довольно много времени, ударяя головой об этом. Небольшая помощь по StackOverflow, добрые люди!
Сценарий: мы пытаемся запустить пользовательский файл .bat, расположенный на сервере CI, с помощью шага TeamCity Powershell.
- Когда сценарий powershell запускается на локальном компьютере вручную, он правильно запускает файл .bat.
- Когда сценарий powershell запускается через TeamCity, он успешно «видит» файл .bat (подтверждается получением ответа «не удается найти файл», когда я переименовываю ожидаемый файл .bat)
- ОДНАКО мы не видели никаких указаний на то, что файл .bat действительно был запущен.
Что мы пробовали:
- Мы добавили «RedirectStandardOutput» и «RedirectStandardError» для попытки диагностики, но, хотя файл журнала создается, он возвращается пустым.
- Мы предоставили разрешения на путь к файлу и попробовали два разных учетных данных, включая учетные данные агента сборки TC.
- В какой-то момент добавлено «-wait», чтобы узнать, нужно ли нам «говорить» PS об ожидании файла .bat.
Два вопроса...
- Что мешает нам запустить этот .bat файл?
- Как мы диагностируем такие проблемы? Банкомат для нас – это «черный ящик».
Настройки TeamCity Powershell:
- Режим работы Powershell: версия 1.0; Разрядность x64 (пробовал и x86)
- Рабочий каталог: Пробовал как пустой и определенный путь к файлу .bat (таким образом, «D:\folder\folder2\»)
- Скрипт: Исходный код
- Выполнение скрипта: выполнить .ps1 из внешнего файла (также пробовали с «Поместить скрипт в PowerShell stdin с аргументом «-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."
ОБНОВЛЕНИЕ 1: если мы удалим часть «-Credential ($Cred)», мы сможем запустить файл testbat.bat из TeamCity, как и ожидалось. Проблема должна каким-то образом заключаться в этом аргументе "-Credential ($Cred)". Есть предположения?
ОБНОВЛЕНИЕ 2: если мы установим часть «-Credential ($Cred)» на учетные данные пользователя агента сборки, мы сможем запустить файл test.bat из TeamCity. Проблема возникает только тогда, когда мы устанавливаем учетные данные для пользователя, отличного от того, который запускает агент сборки. Кажется, это указывает на то, что синтаксис учетных данных в порядке.
ОБНОВЛЕНИЕ 3. Попытка запуска с политикой выполнения PowerShell, установленной на «RemoteSigned» и «Unrestricted». Проблема сохраняется.
ОБНОВЛЕНИЕ 4: предоставили пользователю BuildAgent и пользователю, от имени которого мы хотим запустить это, полные разрешения на powershell через «Set-PSSessionConfiguration». Проблема сохраняется.