将 sha 添加到 git commit 或弹性 beanstalk deploy
Posted
技术标签:
【中文标题】将 sha 添加到 git commit 或弹性 beanstalk deploy【英文标题】:Add sha to git commit or elastic beanstalk deploy 【发布时间】:2016-01-06 16:16:22 【问题描述】:我正在部署一个带有弹性 beanstalk 的应用程序,它有自己的部署工具。该工具采用最新的提交,从中创建一个 zip,并将其部署到云中。为了验证每台服务器上的部署,我希望它能够在部署后报告自己的 SHA。实际上有一些有效的方法:
使用 git 挂钩将 SHA 添加到当前提交。 更改 EB 部署脚本以包含特定的未提交文件,该文件可以在部署脚本或 git 挂钩中轻松创建。 使弹性 beanstalk 当前应用程序版本标签可用于实例。【问题讨论】:
你问的问题到底是什么? 【参考方案1】:我用 .gitattribtues export-subst 解决了这个问题。 (http://git-scm.com/docs/gitattributes) 这会在归档时自动将 SHA 添加到 repo,这就是 elastic-beanstalk 在部署时所做的。
我的 .git 属性:
*.py diff=python
version.txt export-subst
我的版本.txt:
$Format:%H$
见https://***.com/a/16365314/478354
【讨论】:
我正在尝试这个,当我手动运行git archive
时它工作正常,但是当我使用eb deploy
时,不会在 EC2 实例上进行替换。知道为什么会这样吗?我正在使用单容器 docker 堆栈,以防与它有关。 AWS 文档是否在某处承诺eb deploy
将始终使用git archive
?
好的,我想通了。如果你有一个.ebignore
文件,eb deploy
不使用 git。因此,您必须摆脱该文件才能使您的技术发挥作用。【参考方案2】:
使用 git 钩子将 SHA 添加到当前提交。
这似乎并不实用,因为它会更改提交(及其 SHA1)!
因此,在部署时根据提交生成正确的文件通常是最佳实践。
【讨论】:
【参考方案3】:您可以创建部署后挂钩,并在 bash 脚本中访问 SHA 版本。
这是一个对我有用的例子:
使用此内容创建一个类似.ebextensions/post_deploy_hook.config
的文件:
commands:
create_pre_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/pre"
ignoreErrors: true
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/rollback_deploy_tracking.sh":
content: |
#!/bin/bash
REVISION=`unzip -z /opt/elasticbeanstalk/deploy/appsource/source_bundle | tail -n 1`
# put your own logic here...
exit 0;
现在,当使用 eb deploy
进行部署时,该脚本将运行。
【讨论】:
以上是关于将 sha 添加到 git commit 或弹性 beanstalk deploy的主要内容,如果未能解决你的问题,请参考以下文章