AWS Run Command действует иначе, чем на локальном сервере

У меня проблемы с запуском команд на инстансе EC2 с моего сервера Bamboo. У меня есть команда, сгенерированная из команды "Выполнить" в консоли AWS. Я помещаю эту команду в скрипт на моем бамбуковом сервере и запускаю ее:

aws ssm send-command --document-name "AWS-RunPowerShellScript" --targets '{\"Key\":\"tag:Name\",\"Values\":[\"Auto-Scaling-Group\"]}' --parameters '{\"commands\":[\"$fileEXE = \\\"C:\\\\Program Files (x86)\\\\NUnit\\\\NUnit.ConsoleRunner.3.7.0\\\\tools\\\\nunit3-console.exe\\\\\\\"\",\"$testDll = \\\"C:\\\\TestFramework\\\\TestFramework\\\\Tests\\\\bin\\\\Debug\\\\TESTS.dll\\\"\",\"[System.Diagnostics.Process]::Start($fileEXE,$testDll)\"]}' --comment "Run Test UI Testing" --timeout-seconds 600 --region us-east-1

Он запускает тесты. Но он запускает браузер Chrome.exe и chromedriver.exe в качестве фоновых процессов. Это выдает NoSuchWindowException, потому что нет браузера, показывающего...

Я могу запустить ту же команду в PowerShell на экземпляре локально: (* Обратите внимание, что это та же команда, которую я вставил в консоль запуска команд, чтобы сгенерировать код, упомянутый выше.)

$fileEXE = "C:\Program Files (x86)\NUnit\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe\"
$testDll = "C:\TestFramework\TestFramework\Tests\bin\Debug\TESTS.dll"
[System.Diagnostics.Process]::Start($fileEXE,$testDll)

Работает просто отлично. chromedriver.exe - это фоновый процесс, а chrome.exe (браузер) - обычное приложение, которое работает как обычно.

Я считаю, что моя проблема в том, как Run Command запускает мою тестовую программу.

В чем разница между командой "Выполнить" ( send-command) и локальным выполнением команд PowerShell? Разве это не должно делать то же самое?

1 ответ

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

Смотрите: Как избежать двойных кавычек внутри двойных кавычек?

Эта версия должна выглядеть намного проще:

CMD='$fileEXE = "C:\Program Files (x86)\NUnit\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe";'
CMD+='$testDll = "C:\TestFramework\TestFramework\Tests\bin\Debug\TESTS.dll";'
CMD+='[System.Diagnostics.Process]::Start($fileEXE,$testDll);'

aws ssm send-command --document-name "AWS-RunPowerShellScript" \
  --filters "Name=tag:Name,Values=Auto-Scaling-Group" \
  --comment "Run Test UI Testing" --timeout-seconds 600 --region us-east-1 \
  --parameters commands="'$CMD'"

Примечание: запустите его в оболочке Bash.

Другие вопросы по тегам