AWS CodeDeploy 可以执行 powershell 脚本吗?

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通过 EC2 实例上的 Powershell 控制台立即执行的文件,但我的部署在执行 Powershell 脚本时卡住或失败。

appspec.yml据我在 CodeDeploy 文档中看到的那样,似乎没有可以包含在文件中的可接受文件类型的列表。

感谢您的帮助。

答案1

是的!

虽然我还没有找到可接受脚本类型的明确列表,但答案似乎是Yes- Powershell.ps1脚本是可以接受的,如果包含在文件中,它将被执行appspec.yml

在我按照 @kafka 的故障排除页面上的建议添加代码之前,我的 Powershell 脚本一直无法正常工作,因此我的脚本现在包含以下内容:

# 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 中显示为“成功”。有关此内容的更多信息这里

答案2

是的,可以,但是除非您设置变量,否则脚本运行期间遇到的错误不会停止您的部署。

$ErrorActionPreference = ‘Stop’

请参阅此链接了解更多详细信息:

https://aws.amazon.com/premiumsupport/knowledge-center/powershell-cmdlet-errors-codedeploy/

相关内容