2016-06-09 4 views
0

Мне нужно развернуть службу веб-API на экземпляре Amazon EC2. Я настроил AWS CodeDeploy для загрузки источников из репозитория GitHub и поместил их в целевой EC2. Я установил агент CodeDeploy на сервер с Windows Server 2012. Более того, после того, как исходные файлы были успешно загружены, я могу создать проект и опубликовать его, если я сделаю это вручную в консоли PowerShell (запустите BuildApp.ps1).Выполнение msbuild в PowerShell с помощью агента AWS CodeDeploy

Что мне нужно сделать, так это выполнить построение проекта и публикацию через сценарии PowerShell, выполняемые автоматически во время работы агента CodeDeploy.

Я настроил файл appspec.yml, который имеет следующее содержание:

version: 0.0 
os: windows 
files: 
    - source: /My-Project/ 
    destination: C:\inetpub\my-project-dev\src 
hooks: 
    AfterInstall: 
    - location: .\BuildApp.ps1 

BuildApp.ps1 имеет следующее содержание:

#Restore Nuget packages nuget install C:\inetpub\my-project-dev\src\RestApi\packages.config -OutputDirectory .\packages 

Set-Location C:\inetpub\my-project-dev\src\RestApi 

#Build the project msbuild RestApi.csproj /p:Configuration=Release /p:OutputPath="publish" 

Однако, если выполнить публикацию с помощью Amazon Консоль CodeDeploy отображает ошибку, как показано ниже:

nuget : The term 'nuget' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\ProgramData\Amazon\CodeDeploy\ca6544b1-d2cb-4a81-86c0-68ae0f60764b\d-A2V2JCQ3G\deployment-archive\BuildApp.ps1:3 char:1 
nuget install C:\inetpub\my-project-dev\src\RestApi\packages.config 

msbuild : The term 'msbuild' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\ProgramData\Amazon\CodeDeploy\ca6544b1-d2cb-4a81-86c0-68ae0f60764b\d-A2V2JCQ3G\deployment-archive\BuildApp.ps1:8 char:1 
msbuild RestApi.csproj /p:Configuration=Release /p:OutputPath="publish" 

Какая причина s PowerShell не найти команду nuget и msbuild?

+0

Вы уверены, что скрипт работает при запуске вручную за пределами CodeDeploy? –

ответ

1

Проблема заключалась в попытке вызвать 64-разрядную версию команд PowerShell (msbuild), в то время как утилита Amazon CodeDeploy Windows является 32-разрядной программой и выполняет 32-разрядную команду msbuild. Поэтому мне пришлось указать абсолютный путь к msbuild.exe.

C: \ Windows \ Sysnative \ WindowsPowerShell \ v1.0 \ powershell.exe -команд {& "C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe" MyProject.csproj/р: Configuration = Release/p: OutputPath = deployment}