web-dev-qa-db-ja.com

AWS CodeDeployはPowerShellスクリプトを実行できますか?

Powershellスクリプトをappspec.ymlファイルに直接含めることは許容されますか?

version: 0.0
os: windows
files:
  - source: ./MyWebsiteFiles
    destination: /MyWebsite
hooks:
  AfterInstall:
    - location: /Scripts/MyScript.ps1
      timeout: 300

EC2インスタンスのPowershellコンソールを介して即座に実行されるps1ファイルを実行していますが、Powershellスクリプトを実行する時点で展開が停止したり失敗したりします。

CodeDeployのドキュメントで確認できるように、appspec.ymlファイルに含めることができる受け入れ可能なファイルタイプのリストはありません。

ご協力いただきありがとうございます。

5
Luke

はい!

受け入れ可能なスクリプトタイプの明確なリストを見つけることはできませんでしたが、答えは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
#
_

私のスクリプトがPowershellの64ビットバージョンとのみ互換性があるかどうか、またはそれを見つける方法についてはまだわかりませんが、この変更で動作します。

これが誰かのお役に立てば幸いです。

更新:ファイルの場所に関するメモ

_.ps1_スクリプトの実行で直面した問題を強調したいと思います。私の経験から、_ps1_スクリプトは展開パッケージのルートに配置する必要があります(appspec.ymlファイルと同じフォルダーの場所)そうでない場合、スクリプトの実行に失敗し、デプロイメントがCodeDeployで「成功」と表示されます。これについての詳細 ここ

9
Luke

はい、できますが、スクリプトの実行中に発生した変数エラーを設定しない限り、展開は停止しません。

$ErrorActionPreference = ‘Stop’

詳細については、このリンクを参照してください。

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

2
Remotec