我有一个Node.js应用程序,该应用程序通过Codeship AWS部署系统通过CodeDeploy自动部署到Amazon Web Service。

在部署过程中,我已经在appspec.yml中设置了要停止的当前正在运行的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 Deployment Agent日志中看到的当前错误是

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文件,我还尝试了以下更改:


没有列出每个挂钩的runas参数
引用已部署目录中的脚本
引用部署目录之外的脚本
将版本参数初始设置为0.0


不幸的是,除了AWS documentation之外,在appspec.yml故障排除方面几乎没有在线。

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

最佳答案

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

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


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

10-01 13:22