Script AWS CodeDeploy Powershell non riesce ad eseguire

Ho un'applicazione che implemento utilizzando AWS Codedeploy in un'istanza EC2 che esegue Windows Server 2012 R2 con il deployment di codice installato. Codedeploy è installato nell'istanza utilizzando il model CloudFormation consigliato e ha funzionato fino ad ora.

Ho creato un semplice script che dovrebbe creare una cartella nel file system e una directory virtuale all'interno di IIS nel sito Web predefinito, lo script è di seguito:

  • Mappare una port AWS ELB di bilanciamento del carico per bilanciare le porte di più istanze?
  • Come colbind istanze in CloudFormation
  • WordPress di bilanciamento del carico su Amazon Web Services: Gestione delle modifiche
  • Archiviazione di istanze AWS di Amazon
  • Imansible connettersi a Office 365 con PowerShell
  • bind: imansible assegnare l'indirizzo richiesto
  • # 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... # Install IIS Web Server administrator Import-Module -Name ServerManager Import-Module WebAdministration Install-WindowsFeature Web-Server $folderLoc = 'C:\inetpub\imageprocessrcache' if (-not (Test-Path $folderLoc)) { # Create new folder New-Item $folderLoc -type directory # Get rule and add new rule to it $existingAcl = Get-Acl $folderLoc $permissions = 'Users', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow' $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permissions $existingAcl.AddAccessRule($rule) # Apply new rule to the folder $existingAcl | Set-Acl -Path $folderLoc # Get the ACL for the folder for output purposes Get-Acl -Path $folderLoc } $virtualPathLocation = 'IIS:\Sites\Default Web Site\imageprocessrcache' # Check if the virtual directory exists in IIS if (-not (Test-Path $virtualPathLocation)) { # Create it because it doesn't exist yet New-WebVirtualDirectory -Name 'imageprocessrcache' -PhysicalPath $folderLoc -Site 'Default Web Site' } 

    Ecco il file appspec che ho:

     version: 0.0 os: windows files: - source: MyWebsite destination: c:\temp\CodeDeployFiles hooks: BeforeInstall: - location: \Deployment Scripts\IISCreateImageProcessorVirtualDirectory.ps1 timeout: 900 

    Per qualche motivo, lo script non viene eseguito come parte del process di distribuzione, sembra che sia saltato o semplicemente fallisce in silenzio.

    Sono in grado di eseguire il desktop remoto, passare alla cartella temp sull'istanza EC2 (where i file vengono copiati durante la distribuzione da CodeDeploy) e fare clic con il button destro del mouse su IISCreateImageProcessorVirtualDirectory.ps1 e scegliere "Esegui con Powershell" nello script copiato. Questo funziona bene, la cartella e la directory virtuale vengono creati.

    Ho avuto successo nell'esecuzione di script di .ps1 in passato utilizzando il codice di distribuzione con la mia configuration corrente, ma questo non funziona o lascia messaggi di errore.

    Cosa potrebbe causare lo script non eseguito?

    Grazie per l'aiuto.

    Codedeploy Registri con errore

     [2016-11-24 21:10:54.909] [d-DSQ9EQ28J]Script - .\Powershell Scripts\IISCreateImageProcessorVirtualDirectory.ps1 [2016-11-24 21:10:55.112] [d-DSQ9EQ28J][stderr]Processing -File 'C:\ProgramData/Amazon/CodeDeploy/c979dfe5-9d99-4cee-870d-cc9e3cb518bc/d-DSQ9EQ28J/deployment-archive/.\Powershell' failed because the file does not have a '.ps1' extension. Specify a valid Windows PowerShell script file name, and then try again. 

    2 Solutions collect form web for “Script AWS CodeDeploy Powershell non riesce ad eseguire”

    Questo è il modo in cui l'agente CodeDeploy esegue lo script ( sorgente ):

     powershell.exe -ExecutionPolicy Bypass -File <absolute_path_to_your_script_here> 

    Quindi provate a cambiare il tuo hook a questo:

     hooks: BeforeInstall: - location: .\Deployment Scripts\IISCreateImageProcessorVirtualDirectory.ps1 timeout: 900 

    L'operatore .\ consente di eseguire uno script nella directory corrente .

    Risoluzione dei problemi generali

    Se hai bisogno di risolvere ulteriori problemi, puoi trovare le tue implementazioni recenti: C:\ProgramData\Amazon\CodeDeploy\

    E i tuoi registri per distribuzione qui: C:\ProgramData\Amazon\CodeDeploy\DEPLOYMENTGROUPIDGOESHERE\DEPLOYMENTIDGOESHERE\logs

    È ansible scrivere in host o stdout / stderr nei tuoi script e se si esegue tale output finirà in questi registri.

    Ho finalmente ottenuto i miei script Powershell per essere gestito da CodeDeploy ancora una volta. Sembra che io abbia dato i problemi inserendo gli script ps1 in una cartella all'interno del mio pacchetto di distribuzione e non sulla root con il mio file appspec.yml .

    Penso che potrebbe essere qualcosa a che fare con un messaggio che ho letto quando ho letto il file di aiuto di powershell.exe eseguendo powershell.exe /? :

    -File
    Esegue lo script specificato nell'ambito locale ("dot-source"), in modo che le funzioni e le variables che creano lo script sono disponibili nella session corrente. Immettere il path del file di script e tutti i parametri. Il file deve essere l'ultimo parametro del command, perché tutti i caratteri digitati dopo il nome del parametro File vengono interpretati come il path del file di script seguito dai parametri dello script.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.