【问题标题】:Why won't my AWS CodeDeploy run my script after deployment?为什么我的 AWS CodeDeploy 在部署后不运行我的脚本?
【发布时间】:2018-06-04 12:14:11
【问题描述】:

我正在使用 CodeDeploy 将我的应用程序部署到由 Auto Scaling 组创建的 EC2 实例。

应用程序部署良好并被移动到正确的文件映射位置,但是我的AfterInstallation 脚本从未执行。我可以在日志中看到它试图使脚本可执行并通过该阶段,但它从未被执行。

这是我的 appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /opt/lobby
hooks:
  AfterInstall:
    - location: bootstrap.sh
      timeout: 30
      runas: root

这是脚本

#!/bin/bash
nohup nodejs lobby.js &
echo "finished"

我没有看到打印的回声,也没有看到任何与 lobby.js 相关的进程正在运行。我可以通过在部署后键入 ./bootstrap.sh 来验证此脚本是否有效,并且可以正常工作。不过这个钩子应该为我做这个。

这需要是一项后台任务,因为我将在此脚本中运行多个应用程序,但现在只显示一个以使其正常工作。


编辑:

我参考了http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html#appspec-hooks-server 并尝试将 AfterInstall 替换为 ValidateService 和 AfterAllowTraffic(但我没有使用 LoadBalancer)

问题

为什么我的 AfterInstallation 脚本没有被调用,或者看起来是这样?

【问题讨论】:

  • 您确定该文件与 appspec.yml 位于同一文件夹中吗?如果是这样,请尝试位置:./bootstrap.sh
  • 是的,经过一番挖掘,我发现了这个问题。执行日志中抛出了一些错误,然后我不得不将后台进程的输出重定向到 /dev/null 或部署失败。

标签: amazon-web-services amazon-ec2 aws-code-deploy


【解决方案1】:

AfterInstall:AfterInstall脚本包含安装应用程序后需要执行的任务。

安装前脚本示例:

#!/bin/bash
cd /home/ubuntu/production/weone-backend
sudo chown -R ubuntu:ubuntu /home/ubuntu/production
sudo NODE_ENV=production nohup nodejs app.js > /dev/null 2> /dev/null < /dev/null &

在上面的脚本中,我们正在更改应用程序文件夹的所有权 & 开始申请流程。

注意:使用“/dev/null 2&gt; /dev/null &lt; /dev/null &amp;”自动退出 nohup shell,否则您的 CodeDeploy 会卡在 AfterInstall 事件中。

https://www.oodlestechnologies.com/blogs/AWS-CodeDeploy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多