Допустимо ли включать скрипты Powershell непосредственно в appspec.yml
файлы?
version: 0.0
os: windows
files:
- source: ./MyWebsiteFiles
destination: /MyWebsite
hooks:
AfterInstall:
- location: /Scripts/MyScript.ps1
timeout: 300
Я управляю ps1
файл, который выполняется мгновенно через консоль Powershell на экземпляре EC2, но мое развертывание зависает или дает сбой в момент выполнения сценария Powershell.
Похоже, что нет списка допустимых типов файлов, которые можно было бы включить в appspec.yml
файл, из того, что я вижу в документации CodeDeploy.
Спасибо за вашу помощь.
Хотя мне не удалось найти окончательный список допустимых типов скриптов, похоже, что ответ Yes
- Powershell .ps1
сценарии приемлемы и будут выполняться, если они включены в appspec.yml
файл.
Мой скрипт Powershell не работал стабильно, пока я не добавил код, рекомендованный на странице устранения неполадок @kafka, поэтому мой скрипт теперь содержит следующее над ним:
# Are you running in 32-bit mode?
# (\SysWOW64\ = 32-bit mode)
if ($PSHOME -like "*SysWOW64*")
{
Write-Warning "Restarting this script under 64-bit Windows PowerShell."
# Restart this script under 64-bit Windows PowerShell.
# (\SysNative\ redirects to \System32\ for 64-bit mode)
& (Join-Path ($PSHOME -replace "SysWOW64", "SysNative") powershell.exe) -File `
(Join-Path $PSScriptRoot $MyInvocation.MyCommand) @args
# Exit 32-bit script.
Exit $LastExitCode
}
# Was restart successful?
Write-Warning "Hello from $PSHOME"
Write-Warning " (\SysWOW64\ = 32-bit mode, \System32\ = 64-bit mode)"
Write-Warning "Original arguments (if any): $args"
# Your 64-bit script code follows here...
# ...
#
# I PUT MY SCRIPT HERE
#
Я все еще не уверен, совместим ли мой скрипт только с 64-битной версией Powershell или как это узнать, но он работает с этой модификацией.
Надеюсь, это кому-то поможет.
Я хотел бы выделить проблему, с которой я столкнулся при запуске .ps1
скрипты. По моему опыту, ps1
сценарии должны быть размещены в корне вашего пакета развертывания (в той же папке, что и ваш файл appspec.yml), в противном случае ваш сценарий может не выполняться, и развертывание будет отображаться как «Успешно» в CodeDeploy. Подробнее об этом Вот.
Да, может, но если вы не установите переменную, ошибки, возникающие во время выполнения скрипта, не остановят ваше развертывание.
$ErrorActionPreference = ‘Stop’
См. Эту ссылку для получения более подробной информации:
https://aws.amazon.com/premiumsupport/knowledge-center/powershell-cmdlet-errors-codedeploy/