【问题标题】:Is there Environment variable for Amazon ElasticBeanstalk containers for the deployed version?已部署版本的 Amazon ElasticBeanstalk 容器是否有环境变量?
【发布时间】:2013-08-10 08:05:25
【问题描述】:
我正在尝试制作一个部署挂钩,因此当我将我的 PHP 应用程序部署到 EB 时,它将发送应用程序代码版本或 git 提交点,甚至可能发送 git 标签(如果存在的话)到我的分析服务。
如果在实例上设置了任何环境变量来说明它们正在运行的版本是什么,或者它是否甚至将任何 git 数据复制到已作为 EB 设置的一部分部署的实例,我就在徘徊?
【问题讨论】:
标签:
git
amazon-web-services
amazon-ec2
environment-variables
amazon-elastic-beanstalk
【解决方案1】:
AFAIK,当 Elastic Beanstalk 将您的应用程序部署到云时,它会使用 git archive 命令创建一个存档。生成的存档文件没有任何存储库元数据。尽管 Elastic Beanstalk 使用您的提交 sha1 作为版本名称的一部分,但如果您使用自己的版本控制架构,sha1 可能不可用。
作为替代方案,您可以创建一个 shell 脚本来将提交信息发送到您的分析服务。使用 git alias 你可以执行你的脚本和aws.push 作为一个命令。
# .git/config
[alias "custom"]
push = !git aws.push $1 && ./custom.sh
# custom.sh
commit=$(git rev-parse HEAD)
echo 'send info to analytics service for commit: ' $commit
然后执行为$ git custom.push
在上面的示例中,即使aws.push 导致错误,custom.sh 也会执行,因此如果您需要更可靠的解决方案,您可能希望将其与.git/AWSDevTools/aws.elasticbeanstalk.push 脚本本身更紧密地集成。
希望对你有帮助。
【解决方案2】:
对于我从 Git 部署的 Python 应用程序,用于 beanstalk 版本的提交 SHA-1 存储在当前部署的应用程序的源 ZIP 文件的注释字段中。在应用程序启动时,我提取该值并将其公开给应用程序。
Python代码是
with zipfile.ZipFile('/opt/elasticbeanstalk/deploy/appsource/source_bundle') as z:
return z.comment
您可以使用以下命令从 shell 中检查值
$ unzip -z /opt/elasticbeanstalk/deploy/appsource/source_bundle
Archive: /opt/elasticbeanstalk/deploy/appsource/source_bundle
1049cbed865334a805ae2ae3179339dd...
您可以在 PHP 中使用 ZipArchive::getArchiveComment。