O AWS CodeDeploy pode executar scripts do powershell?

5

É aceitável incluir scripts do Powershell diretamente nos arquivos appspec.yml ?

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

Estou executando um arquivo ps1 que é executado instantaneamente por meio do console Powershell na instância do EC2, mas minha implantação está ficando presa ou falhando no momento de executar o script Powershell.

Não parece haver uma lista de tipos de arquivo aceitáveis que possam ser incluídos em um arquivo appspec.yml , pelo que eu vejo na documentação do CodeDeploy.

Obrigado pela sua ajuda.

    
por Luke 14.06.2016 / 11:06

2 respostas

8

SIM!

Embora não tenha conseguido encontrar uma lista definitiva dos tipos de script aceitáveis, parece que a resposta é Yes - os scripts Powershell .ps1 são aceitáveis e serão executados se incluídos no arquivo appspec.yml .

Meu script do Powershell não estava funcionando consistentemente até que eu adicionei o código como recomendado na página de solução de problemas pelo @kafka, então meu script agora contém o seguinte acima:

# 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
#

Ainda não tenho certeza se meu script é compatível apenas com a versão de 64 bits do Powershell ou como descobri-lo, mas funciona com essa modificação.

Espero que isso ajude alguém.

Atualização: uma nota sobre a localização do arquivo

Gostaria de destacar um problema que enfrentei com a execução de .ps1 scripts. Pela minha experiência, ps1 scripts devem ser colocados na raiz do seu pacote de implantação (o mesmo local de pasta do arquivo appspec.yml), caso contrário, o script pode falhar na execução e a implantação será exibido como 'Bem-sucedido' no CodeDeploy. Mais informações sobre este aqui .

    
por 14.06.2016 / 15:13
2

Sim, mas, a menos que você defina uma variável, os erros encontrados durante a execução do script não interromperão sua implantação.

$ErrorActionPreference = ‘Stop’

Veja este link para mais detalhes:

link

    
por 31.12.2016 / 15:34