12

Ich habe eine Node.js Anwendung die automatisch auf Amazon Web Service durch Codeship eingesetzt wird, um dieCodeDeploy AWS Deployment System.Amazon Web Service CodeDeploy appspec.yml Probleme

Während der Bereitstellung habe ich in meinem appspec.yml für die derzeit laufende Web-Anwendung gestoppt werden. Sobald die Bereitstellung abgeschlossen ist, möchte ich, dass die Webanwendung erneut gestartet wird.

os: linux 
files: 
    - source:/
    destination: /var/www/app2 
hooks: 
    AfterInstall: 
     - location: bash_scripts/stop_forever.sh 
     runas: ec2-user 
    ApplicationStart: 
     - location: bash_scripts/start_forever.sh 
     runas: ec2-user 

aber ich habe noch nicht gelungen, eine dieser Skripte müssen während einer Bereitstellung erfolgreich aus der appspec.yml-Datei aufgerufen werden.

Der aktuelle Fehler, den ich in dem AWS Deployment Agent-Protokoll bin zu sehen ist

Error CodeScriptMissing 
Script Name /var/scripts/stop_forever.sh 
MessageScript does not exist at specified location: /var/scripts/stop_forever.sh 
Log TailLifecycleEvent - ApplicationStop 

Diese auf eine ältere Version der appspec.yml Datei zu beziehen scheint, die diese Skripte in einem anderen Ort zu laufen versuchen, . Obwohl ich den Inhalt der Datei appspec.yml im bereitgestellten Paket geändert habe, bleibt diese Fehlermeldung bei jeder Bereitstellung unverändert.

Zusätzlich Datei oben aufgeführten appspec.yml, ich habe auch versucht, die folgenden Änderungen vornehmen:

  • Nicht ein runas Parameter für jeden Haken Listing
  • ein Skript in der entfalteten Verzeichnis referenzieren
  • Referenzierung ein Skript außerhalb der entfalteten Verzeichnis
  • eine Version Parameter anfänglich auf 0,0 Having

Leider gibt es nur sehr wenig online im Hinblick auf appspec.yml Fehlerbehebung, andere als die AWS documentation.

Was ist offensichtlich, was ich falsch mache?

Antwort

21

Der Hook ApplicationStop wird von der zuvor installierten Implementierung aufgerufen, bevor versucht wird, die aktuelle Datei der Implementierung appspec.yml auszuführen.

Um dies zu verhindern, müssen Sie alle zuvor installierten Deployments vom Server entfernen.

  • den Agenten Code deploy Stop - sudo service codedeploy-agent stop
  • klar alle Installationen unter /opt/codedeploy-agent/deployment-root
  • Starten Sie den Code Deploy Agent - sudo service codedeploy-agent start
16

Es gibt eine andere Art und Weise in den Entwicklerforen AWS dokumentiert, was ich denke, ist vorzuziehen.

Verwenden Sie die Option --ignore-application-stop-failures mit dem CLI-Tool während der Bereitstellung, es funktionierte perfekt für mich.

Beispiel aus dem Forum genommen:

aws deploy create-deployment --application-name APPLICATION --deployment-group-name GROUP --ignore-application-stop-failures --s3-location bundleType=tar,bucket=BUCKET,key=KEY --description "Ignore ApplicationStop failures due to broken script" 

https://forums.aws.amazon.com/thread.jspa?threadID=166904

+1

eine Idee, wenn dieser Flag kann in irgendeiner Weise verwendet werden, wenn über CodeDeploy Konsole oder über einen Dritten Service (wie CircleCI) bereitstellen, die ‚doesn t verwenden Sie den CLI dafür? – Vee6

Verwandte Themen