Amazon Web 服务 CodeDeploy appspec.yml 个问题

Amazon Web Service CodeDeploy appspec.yml problems

我有一个 Node.js 应用程序,它正在通过 Codeship using the CodeDeploy AWS 自动部署到 Amazon Web Service部署系统.

在部署过程中,我在 appspec.yml 中设置了要停止的当前 运行ning Web 应用程序。部署完成后,我希望重新启动 Web 应用程序。

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

但是我还没有能够在部署期间从 appspec.yml 文件中成功调用这些脚本中的任何一个。

我在 AWS 部署代理日志中看到的当前错误是

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

这似乎是指 appspec.yml 文件的旧版本,该文件试图 运行 这些脚本位于不同的位置。即使我更改了已部署包中 appspec.yml 文件的内容,此错误消息在每次部署时仍然相同。

除了上面列出的 appspec.yml 文件外,我还尝试进行以下更改:

不幸的是,除了 AWS documentation

之外,关于 appspec.yml 故障排除的在线信息很少

我做错了什么非常明显的事情?

在尝试 运行 当前部署 appspec.yml 文件之前,正在从先前安装的部署中调用 ApplicationStop 挂钩。

为了防止这种情况发生,您必须从服务器上删除任何以前安装的部署。

  • 停止代码部署代理 - sudo service codedeploy-agent stop
  • 清除/opt/codedeploy-agent/deployment-root
  • 下的所有部署
  • 重新启动代码部署代理 - sudo service codedeploy-agent start

A​​WS 开发人员论坛中记录了另一种方法,我认为这种方法更可取。

在进行部署时使用 CLI 工具的 --ignore-application-stop-failures 选项,它对我来说非常有效。

取自论坛的例子:

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