【问题标题】:Amazon Web Services > CodeDeploy > BitBucket > My nodejs Appspec.yml is brokenAmazon Web Services > CodeDeploy > BitBucket > 我的 nodejs Appspec.yml 坏了
【发布时间】:2018-10-11 01:47:16
【问题描述】:

我正在尝试让一个 非常 简单的 nodejs 应用程序通过我的设置(BitBucket 到 AWS),我可以让默认示例工作:

https://github.com/awslabs/aws-codedeploy-samples/tree/master/applications/SampleApp_Linux

但该示例是在 apache、httpd 中,所以当我尝试更改 nodejs 的 appspec.yml 时,设置会停止。这是我的 appspec.yml:

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/app
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root

安装依赖项:

#!/bin/bash
yum install -y nodejs npm
npm install

启动服务器:

#!/bin/bash
node server.js

【问题讨论】:

  • 你能告诉我们更多关于它是如何破坏的细节吗?您是否在任何地方收到错误消息等?
  • 实际上,没有更多信息,我的猜测是您的 start_server 脚本导致“超时”,因为 node server.js 在前台启动应用程序,这与在背景。 node server.js 在进程终止之前永远不会返回
  • 部署说最后一个接收事件是 beforeInstall。我刚刚发现它还说: (): mapping values are not allowed in this context at line 8 line 11. 你说 start_server 永远不会返回——这是否意味着我应该放在ApplicationStart中吗?
  • @LearnMoreCoding.com 在您解决问题时需要帮助

标签: node.js amazon-web-services aws-code-deploy


【解决方案1】:

我从 ec2 事件日志和其他地方发现了这一点。这是我所拥有的:

appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /tmp/
hooks:
  AfterInstall:
    - location: scripts/install_dependencies
      timeout: 100
      runas: root
  ApplicationStart:
    - location: scripts/start_server
      timeout: 100
      runas: root

安装依赖项:

#!/bin/bash
cd /tmp/

curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
yum install -y gcc-c++ make
yum install -y nodejs npm

npm install -g pm2
npm install

对于 start_server,停止并删除 httpd。然后启动 pm2。那么“node server.js”的问题是它永远不会解决。

启动服务器:

#!/bin/bash
cd /tmp/

isExistApp = `pgrep httpd`
if [[ -n  $isExistApp ]]; then
    service httpd stop
fi

yum remove -y httpd

pm2 delete all
pm2 start server.js

【讨论】:

  • 我知道这是一个老话题,但你有没有解决它?除了 Ruby 和 Sinatra 框架外,我遇到了类似的问题。从我在日志中可以看出,使用我的 appspec.yml,它正在启动并运行所有内容,但是它超时了,因为 codedeploy 没有意识到它刚刚所做的就是成功。所以它在超时之前成功启动并运行了很长时间。我无法弄清楚如何让 CodeDeploy 识别成功。
【解决方案2】:

对于基于 ubuntu/debian 的发行版,herehere 我发现了一些真正帮助我将其整合在一起的要点。

appspec.yml:

version: 0.0
os: linux
files:
  - source: /
    destination: /tmp/
hooks:
  AfterInstall:
    - location: scripts/install_dependencies
      timeout: 100
      runas: root
  ApplicationStart:
    - location: scripts/start_server
      timeout: 100
      runas: root
  ValidateService:
    - location: scripts/test
      timeout: 100
      runas: root

安装依赖项:

#!/bin/bash
cd /tmp/

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential

npm install -g pm2
npm install

启动服务器:

#!/bin/bash
cd /tmp/
# set any env variables
export NODE_ENV=staging

pm2 delete all
pm2 start dist/server/index.js --name MyAPI

测试:

#!/bin/bash
sleep 10
nc -zv 127.0.0.1 80

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 2016-03-15
    • 2010-11-30
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多