【问题标题】:Installing git through .ebextensions on Elastic Beanstalk在 Elastic Beanstalk 上通过 .ebextensions 安装 git
【发布时间】:2015-06-25 19:43:28
【问题描述】:

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

问题是:在该实例上调用 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.

【问题讨论】:

  • 看看here.
  • ...和here
  • 感谢@TimBiegeleisen,我尝试在 .ebextensions con 文件中将 git 作为 yum 包包含在内,也尝试了使用依赖项的第二种方法,仍然相同。
  • 您可以尝试直接在您的 Linux 实例上安装 Git 吗?
  • 我的 elasticbeanstalk 组刚开始安装 NPM 失败,因为没有找到 git。近 6 个月来的第一个错误,任何地方都没有代码更改 - 冻结版本号。可能是 AWS 方面的错误?

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


【解决方案1】:

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

packages:
  yum:
    git: []

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

【讨论】:

  • 这就是我正在使用的,它可以工作。 aws doc
【解决方案2】:

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

  1. 如果需要,在您的 package.json 中定义一个 preinstall 脚本以安装 git
  2. 您可以在 pre-appdeploy hooks 目录或 preinit hooks 目录中使用 ebextensions 添加script(file)。我建议使用 preinit 挂钩,因为这是安装软件包的挂钩所在。只需将脚本的路径设置为 /opt/ebextensions/hooks/preinit/99_install_git.sh,或者如果您想在 pre-appdeploy 中执行,/opt/ebextensions/hooks/appdeploy/pre/99_install_git.sh,并使用 mode 字段使文件可执行。
  3. 使用 ebextensions 到 install a package

对于您的用例,我认为#3 是最佳选择。有点晚了,但我希望你觉得它有用

【讨论】:

  • 这很有帮助,谢谢!但是 OP 说他将 git 作为 yum 包包含在 .elasticbeanstalk/*.config 中——这应该按照您在 #3 中的建议进行,对吗?那么EB为什么不理它呢?
  • @ericpeters0n 我不知道。我一直觉得豆茎是一个善变的野兽。可能是实例的间歇性问题。
猜你喜欢
  • 2014-07-31
  • 1970-01-01
  • 2020-05-20
  • 2018-06-05
  • 2017-07-02
  • 2018-11-13
  • 2017-08-04
  • 2018-05-12
  • 2016-05-12
相关资源
最近更新 更多