将 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的主要内容,如果未能解决你的问题,请参考以下文章

使用git 遇到问题

如何取消github commit

git 回退到制定commit

git回退到某个commit

Git回滚代码到某个commit

Git回滚代码到某个commit