Назад | Перейти на главную страницу

Может ли AWS CodeDeploy выполнять сценарии PowerShell?

Допустимо ли включать скрипты 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/