0

Je rencontre des problèmes lors de l'exécution de commandes sur une instance EC2 à partir de mon serveur Bamboo. J'ai une commande générée à partir de la commande Exécuter dans AWS Console. Je place cette commande dans un script sur mon serveur de bambou et l'exécute:AWS Run Command est différent de l'exécution locale sur le serveur

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 

Il exécute les tests. Mais il exécute le navigateur Chrome.exe et le chromedriver.exe en tant que processus d'arrière-plan. Cela déclenche une exception NoSuchWindowException car aucun navigateur n'apparaît ...

Je peux exécuter la même commande dans PowerShell sur l'instance localement: (* Notez que c'est la même commande que j'ai collée dans la console Exécuter la commande pour générer la code mentionné ci-dessus.)

$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) 

Cela fonctionne très bien. chromedriver.exe est un processus d'arrière-plan et chrome.exe (le navigateur) est une application régulière qui fonctionne comme d'habitude.

Je crois que mon problème est de savoir comment Run Command exécute mon programme de test.

Quelle est la différence entre Run Command (send-command) et l'exécution des commandes PowerShell localement? Ne devrait-il pas faire la même chose?

+0

Bump ... Aidez s'il vous plaît! Je suis perplexe! –

+0

Toujours accroché à ça ... rien? Personne ne peut aider? –

Répondre

0

Je pense qu'il y a un bordel avec des citations et la façon dont elles sont échappées.

Voir: How to escape a double quote inside double quotes?

Cette version devrait chercher beaucoup plus simple:

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'" 

Note: exécuter dans le shell Bash.