AWS CodeDeploy正在从代码部署代理程序dir运行AfterInstall脚本

mat*_*ilk 14 bash amazon-web-services node.js aws-code-deploy

我正在尝试在AWS代码部署中运行AfterInstall脚本,但它是从/ opt/codedeploy-agent/dir而不是我的app目录运行的.

这就是appspec.yml文件的样子:

version: 0.0

os: linux

files:
  - source: /
    destination: /tmp/epub

hooks:
  AfterInstall:
    - location: server/install-packages.sh
      runas: root
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是一个基本的例子.

现在,bash脚本如下所示:

#!/bin/bash
npm install
Run Code Online (Sandbox Code Playgroud)

我只想安装npm,就是这样.

不幸的是我收到了错误:

LifecycleEvent - AfterInstall
Script - server/install-packages.sh
[stderr]npm ERR! install Couldn't read dependencies
[stderr]npm ERR! Linux 3.13.0-48-generic
[stderr]npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
[stderr]npm ERR! node v4.2.1
[stderr]npm ERR! npm  v2.14.7
[stderr]npm ERR! path /opt/codedeploy-agent/package.json
[stderr]npm ERR! code ENOPACKAGEJSON
[stderr]npm ERR! errno -2
[stderr]npm ERR! syscall open
[stderr]
[stderr]npm ERR! package.json ENOENT: no such file or directory, open '/opt/codedeploy-agent/package.json'
[stderr]npm ERR! package.json This is most likely not a problem with npm itself.
[stderr]npm ERR! package.json npm can't find a package.json file in your current directory.
[stderr]
[stderr]npm ERR! Please include the following file with any support request:
[stderr]npm ERR!     /opt/codedeploy-agent/npm-debug.log
Run Code Online (Sandbox Code Playgroud)

我正在尝试不同的appspec.yml配置,例如添加runas或在位置路径的开头添加"/".它一直试图从/ opt/codedeoploy-agent /目录运行.

无奈之下,我设置了脚本的绝对路径,但后来我得到了:

Script does not exist at specified location: /tmp/epub/server/install-packages.sh
Run Code Online (Sandbox Code Playgroud)

这真的很烦人,因为我根据文档做了一切,但可能我错过了非常小的东西!

谢谢

mat*_*ilk 23

好,

所以我发现,codedeoloy-agent从部署实例上的代理创建的临时目录运行AfterInstall(可能还有所有其他步骤),所以在我的情况下我必须通过cd-ing来修改bash脚本正确的目录:

#!/bin/bash
cd /tmp/epub/server/
npm install
Run Code Online (Sandbox Code Playgroud)

  • 我不记得我是否从这里得出结论:http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html#app-spec-ref-hooks - 也许有一个一句话暗示 - 我记得它花了我很长时间 - 或者更有可能是试验和错误,或者两者兼而有之:) (2认同)