在我的ElasticBeanstalk环境中,我的 node 通常(多年来)需要5分钟.要部署的js应用程序,实例将在EB Health选项卡中从状态"待定"更改为"确定".
自5月14日起,应用程序部署需要约15分钟,而不涉及应用程序、基础设施、应用程序存储库、EB环境或EC2 linux映像.同样的事情发生在生产和开发环境中,这两个环境都是独立的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分钟,然后安装devdependences并运行prepare
脚本5分钟.我不确定这是否也发生在EC2实例上,但这是我发现的唯一提示.
这3个命令超时了git ls-remote
个命令和prepare
个脚本,总共约8分钟.因此,如果这是以前没有执行过的,那么这可能解释了部署时间更长的原因.但是,为什么这次部署会突然与过go 几年有所不同呢?
我遇到了一个GitHub blog post:
2022年3月15日
改变是永久性的.我们将永久停止接受DSA密钥.在上述截止点之后上传的RSA密钥将仅适用于SHA-2签名(但同样,在此日期之前上传的RSA密钥将继续适用于SHA-1).不推荐使用的MAC、密码和未加密的Git协议将被永久禁用.
因此GitHub停止接受使用git://
协议的请求.也许这就是部署时间更长的原因,而超时也发生在EC2中.但这一变化在3月15日(正好是两个月前)已经成为永久性的,那么为什么这个问题直到现在才出现呢.