在Elastic Beanstalk上通过.ebextensions安装git

时间:2015-04-19 01:46:03

标签: node.js git amazon-web-services npm elastic-beanstalk

我收到部署到Elastic Beanstalk的错误,因为实例上没有git。我的package.json中的一个依赖项依赖于git存储库,需要git clone。 实例上没有安装Git。我尝试通过yum部署时通过.ebextensions .conf文件安装它,但是当我进入实例时它不存在。

问题是:在该实例上调用npm install之前,在Elastic Beanstalk上运行的Linux实例上安装和使用git的正确方法是什么?

这是显示错误的日志:

[2015-04-18T09:00:02.815Z] ERROR [1777]  : Command execution failed: Activity failed. (ElasticBeanstalk::ActivityFatalError)
caused by: + /opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install
  npm WARN package.json amity-api-v2@2.0.0 No repository field.
  npm WARN package.json amity-api-v2@2.0.0 No README data
  npm WARN `git config --get remote.origin.url` returned wrong result (https://github.com/awslabs/dynamodb-document-js-sdk) undefined
  npm WARN `git config --get remote.origin.url` returned wrong result (https://github.com/awslabs/dynamodb-document-js-sdk) undefined
  npm ERR! git clone https://github.com/awslabs/dynamodb-document-js-sdk undefined
  npm ERR! git clone https://github.com/awslabs/dynamodb-document-js-sdk undefined
  npm ERR! Linux 3.14.35-28.38.amzn1.x86_64
  npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v0.12.0-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v0.12.0-linux-x64/bin/npm" "--production" "install"
  npm ERR! node v0.12.0
  npm ERR! npm  v2.5.1
  npm ERR! code ENOGIT

  npm ERR! not found: git
  npm ERR!
  npm ERR! Failed using git.
  npm ERR! This is most likely not a problem with npm itself.
  npm ERR! Please check if you have git installed and in your PATH.

2 个答案:

答案 0 :(得分:9)

如果您将配置文件放在.ebextensions文件夹中,如下所示:

packages:
  yum:
    git: []

确保git包位于具有更高执行索引的配置文件中,然后实际需要git。通常将它放在名为00-packages.config的第一个配置文件中。

答案 1 :(得分:2)

git运行之前,我可以想到三种方法可以确保在系统上安装npm install(或任何依赖项)。

  1. preinstall中定义package.json脚本,根据需要安装git
  2. 您可以在pre-appdeploy hooks目录或preinit hooks目录中使用ebextensions添加script(file)。我会建议preinit钩子,因为这是安装包的钩子的地方。只需将脚本的路径设置为/opt/ebextensions/hooks/preinit/99_install_git.sh,或者如果您希望在预应用程序/opt/ebextensions/hooks/appdeploy/pre/99_install_git.sh中进行操作,并使用mode字段使文件可执行。
  3. 将ebextensions用于install a package
  4. 对于您的用例,我认为#3是最佳选择。有点晚了,但我希望你觉得它很有用