亚马逊网络服务CodeDeploy appspec.yml问题

20

我有一个使用Node.js编写的应用程序,正在通过Codeship自动部署到CodeDeploy AWS部署系统中。

在部署过程中,我在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部署代理日志中看到的当前错误是:

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参数
  • 引用已部署目录中的脚本
  • 引用已部署目录之外的脚本
  • 最初将version参数设置为0.0

不幸的是,在appspec.yml故障排除方面,网上几乎没有任何信息,除了AWS文档

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

2个回答

40

ApplicationStop钩子从先前安装的部署中被调用,然后尝试运行当前部署的appspec.yml文件。

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

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

sudo service codedeploy-agent status 这是用来检查状态的命令。还有 AWS 文档。https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html - Santosh

18

在AWS开发者论坛中有另一种方法,我认为这是更可取的。

在部署时使用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


4
这个标志是否可以在通过CodeDeploy控制台或第三方服务(如CircleCI)部署时以任何方式使用?这些服务不使用cli进行部署。 - Vee6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接