我看到了两种可能的方式。虽然我必须说我不明白为什么这并不容易,因为这是一个非常合法的用例,但它看起来似乎不受 AWS 的支持。
方案一:生成版本标签
在您这边生成版本标签(例如,使用提交哈希),然后将其作为您代码的一部分。
例如在你的Makefile:
VERSION=$(shell git rev-parse --short HEAD)
deploy: requirements.txt
echo $(VERSION) > version.txt
eb deploy --label $(VERSION)
.PHONY: deploy
然后你可以从实例中读取这个文件。还有一些其他选项,例如使用sed 将其作为变量放入您的文件之一。
解决方案 2:从未记录的文件中获取(不稳定)
我试图在 EC2 实例上找到此元数据,但不幸的是,它可以在 root 拥有的文件中找到:
[root@... ec2-user]# cat /opt/elasticbeanstalk/deploy/manifest
{"RuntimeSources":{"yourappname":{"app-VERSION":{"s3url":""}}},"DeploymentId":24,"Serial":26}
[ec2-user@... ~]$ ls -la /opt/elasticbeanstalk/deploy/manifest
-rw-rw---- 1 root awseb 98 Mar 22 17:57 /opt/elasticbeanstalk/deploy/manifest
我不确定你是否可以这样做,但你可以有一个部署后命令,将这个文件 chown 或复制到一个你可以阅读的地方。我可能会尝试一下,然后告诉你它是否有效。
这里也有人问过类似的问题:How can you get the Elastic Beanstalk Application Version in your application?(显然我是在写完上面之后才发现的)。