我正在尝试制作一个部署挂钩,因此当我将我的 PHP 应用程序部署到 EB 时,它将发送应用程序代码版本或 git 提交点,甚至可能发送 git 标记(如果存在的话)到我的分析服务。
如果在实例上设置了任何环境变量来说明它们正在运行的版本是什么,或者它是否甚至将任何 git 数据复制到作为 EB 设置的一部分部署的实例,我正在徘徊?
我正在尝试制作一个部署挂钩,因此当我将我的 PHP 应用程序部署到 EB 时,它将发送应用程序代码版本或 git 提交点,甚至可能发送 git 标记(如果存在的话)到我的分析服务。
如果在实例上设置了任何环境变量来说明它们正在运行的版本是什么,或者它是否甚至将任何 git 数据复制到作为 EB 设置的一部分部署的实例,我正在徘徊?
对于我从 Git 部署的 Python 应用程序,用于 beanstalk 版本的提交 SHA-1 存储在当前部署的应用程序的源 ZIP 文件的注释字段中。在应用程序启动时,我提取该值并将其公开给应用程序。
Python代码是
with zipfile.ZipFile('/opt/elasticbeanstalk/deploy/appsource/source_bundle') as z:
return z.comment
您可以使用以下命令检查外壳中的值
$ unzip -z /opt/elasticbeanstalk/deploy/appsource/source_bundle
Archive: /opt/elasticbeanstalk/deploy/appsource/source_bundle
1049cbed865334a805ae2ae3179339dd...
您可以在 PHP 中使用ZipArchive::getArchiveComment。
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
在上面的示例中,即使出现错误也会执行 custom.sh aws.push
,因此如果您需要更可靠的解决方案,您可能希望将其与.git/AWSDevTools/aws.elasticbeanstalk.push
脚本本身更紧密地集成。
希望能帮助到你。