У меня есть базовый AMI для Windows Server 2016 на AWS, который я собираю для развертывания CodeDeploy. Я использую интерфейс командной строки для развертывания основного веб-сайта asp.net из github в этот экземпляр EC2.
aws deploy create-deployment --application-name my-App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name App-DepGrp --description "My GitHub deployment demo" --github-location repository=xxx-yyy/aws,commitId=d2c7cfcf90sfsfd2c7cfcfgs9e1e0f50eshshsgsgd2c7cfcfd2c7cgbsfgsbg
Развертывание начинается, и appspec вызывает файл Install.ps1, который отправляется исоздает папку, вызванную командой file в файле сценария powershell. Сайт не создается. Пул приложений также не создается. Вот как выглядит мой файл Appspec.yml:
version: 0.0
os: windows
files:
- source: \
destination: c:\website-dropfolder
hooks:
ApplicationStart:
- location: .\Install.ps1
timeout: 300
runas: Administrator
Это Install.ps1
# Create folder to publish binaries from drop folder
mkdir c:\website-published
# Switch to drop folder
Set-Location C:\website-dropfolder
# Restore the nuget references
& "C:\Program Files\dotnet\dotnet.exe" restore
# Publish application with all of its dependencies and runtime for IIS to use
& "C:\Program Files\dotnet\dotnet.exe" publish --configuration release -o c:\website-published --runtime active
# Create an IIS website and point it to the published folder
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command {Import-Module WebAdministration; New-WebSite -Name CoreWebsite -Port 80 -HostHeader CoreWebsite -PhysicalPath "$env:systemdrive\website-published"}
# Create AppPool for website and set CLR version to core-dotnet
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command {Import-Module WebAdministration; New-WebAppPool CoreWebsiteAppPool}
C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell. exe -Command {Import-Module WebAdministration;Set-ItemProperty IIS: \ AppPools \ CoreWebsiteAppPool managedRuntimeVersion "" -verbose}
Я поставил -ErrorAction SilentlyContinue
на случай, если возникнут какие-либо проблемы с восстановлением или публикацией dotnet. Что приводит к тому, что сайт не создается? Я запустил те же сценарии на своем компьютере с Windows 10 dev, и веб-сайт был создан с пулом приложений и даже установил его версию CLR. То же самое не работает на Windows Server 2016?
РЕДАКТИРОВАТЬ
Я посмотрел журналы данных пользователя, и кажется, что с этой строки происходит ошибка:New-WebSite -Name CoreWebsite -Port 80 -HostHeader CoreWebsite -PhysicalPath "$env:systemdrive\website-published" -ErrorAction SilentlyContinue
Ошибка:
System.Management.Automation.PSCustomObjectSystem.Object1Подготовка модулей для первого использования.0-1-1Completed-1 New-WebSite: не удается получить динамическийпараметры для командлета. _x000D__x000A_Retrieving СОМ фабрику классов для компонента с CLSID {_x000D__x000A_ 688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} не удалось из-за ошибки: _x000D__x000A_80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 _x000D__x000A_ (REGDB_E_CLASSNOTREG)) ._ x000D__x000A_At линии: 1 полукокса:34_x000D__x000A_ + ... регистрация;New-WebSite -Name CoreWebsite -Port 80 -HostHeader CoreWe ..._ x000D__x000A _ +
Кажется, что команды powershell не работают, когда они вызываются агентом codedeploy даже при мысли, что он запускается как администратор, но когда я вручную запускаю файл сценария в командной строке powershell, он работает как положено. Я даже указал путь к исполняемому файлу powershell, который нужно вызвать, чтобы он не использовал тот, который находится в папке C:\Windows\SysWOW64
. Даже это не работает. Есть идеи?