在我的 ElasticBeanstalk 环境中,部署我的 Node.js 应用程序并使实例从“Pending”状态更改为“OK”在 EB Health 选项卡中通常需要大约 5 分钟(多年如一日)。
自 5 月 14 日以来,即使没有更改应用程序、基础架构、应用程序存储库、EB 环境或 EC2 Linux 映像,应用程序部署也需要大约 15 分钟。在生产环境和开发环境中都出现了相同的情况,两者是独立的 EB 环境,都部署了同一个应用程序。
查看 /var/log/eb-activity.log,我发现这 15 分钟花费在以下步骤:
脚本本身只运行:
这些
这3个超时的
我看到了这篇GitHub的博客文章:
自 5 月 14 日以来,即使没有更改应用程序、基础架构、应用程序存储库、EB 环境或 EC2 Linux 映像,应用程序部署也需要大约 15 分钟。在生产环境和开发环境中都出现了相同的情况,两者是独立的 EB 环境,都部署了同一个应用程序。
查看 /var/log/eb-activity.log,我发现这 15 分钟花费在以下步骤:
[Application deployment <APPID>/StartupStage0/AppDeployPreHook/50npm.sh] : Starting activity...
脚本本身只运行:
/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install
这个脚本只是进行了一些文件检查和路径组合,然后运行了:
npm --production install
为了对比,我清除了任何缓存文件并在本地运行了相同的命令,用时约11分钟:
rm -rf node_modules
node cache clean -f
npm --production install
我再次使用 --loglevel silly
命令运行,结果显示在 package.json
中有一个依赖项未从 npm 注册表中获取,而是直接从 GitHub 中获取,指向一个标签:
npm sill pacote Retrying git command: ls-remote -h -t git://github.com/<org>/<repo>.git attempt # 2
npm sill pacote Retrying git command: ls-remote -h -t git://github.com/<org>/<repo>.git attempt # 3
npm verb prepareGitDep github:<org>/<repo>#<label>: installing devDeps and running prepare script.
这些
git ls-remote
命令的超时时间约为1分钟,然后似乎安装devDependencies
,运行prepare
脚本需要另外5分钟。我不确定这是否也发生在EC2实例上,但那是我找到的唯一提示。这3个超时的
git ls-remote
命令和prepare
脚本总共需要约8分钟。因此,如果这是之前没有执行过的内容,可能会解释部署时间更长。但是为什么部署突然与多年来不同呢?
我看到了这篇GitHub的博客文章:
因此,GitHub停止了使用2022年3月15日
做出的更改已成为永久性的。我们将永久停止接受DSA密钥。在上述截止日期之后上传的RSA密钥仅适用于SHA-2签名(但是在此日期之前上传的RSA密钥将继续使用SHA-1)。弃用的MAC、密码和未加密的Git协议将被永久禁用。
git://
协议的请求。也许这就是部署时间更长并且超时也会发生在EC2上的原因。但是这个更改已经在3月15日(正好2个月前)永久生效了,那为什么问题现在才出现呢?