从 Heroku 应用程序中访问当前的 git 提交号

JP.*_*JP. 6 ruby git heroku sinatra buildpack

我知道slug 编译器会删除.git在创建 heroku slug 时目录,但是有什么方法可以配置 Heroku 以便我可以从脚本中访问当前正在运行的 git 提交号?

我希望能够在我的 sinatra 应用程序(在 Heroku 中运行)上有一个小链接,上面写着“运行版本 e72fb274a0 ”(或类似的东西)。如何检索它,或强制 slug 编译器将其添加到环境变量中?

进步:

我认为最好的方法是制作一个自定义 buildpack,在删除 .git 目录之前将 git commit 版本号写入 heroku slug。

我已经尝试过这样做(请参阅我的 ruby​​ buildpack 分支),但是我添加的行 –第 23 行– 似乎没有完成这项工作。Heroku 看到并使用新的 buildpack,但似乎没有将文件写入 slug。

任何人都知道为什么我的自定义 buildpack 没有按预期工作?

谢谢,

J.P

Rob*_*ley 7

几个选项...

SOURCE_VERSION环境变量(构建时)

自 2015 年 4 月 1 日起,有一个SOURCE_VERSION环境变量可用于在 Heroku 上运行的构建。对于 git-pushed 构建,这是正在构建的源的 git commit SHA-1:

https://devcenter.heroku.com/changelog-items/630

(感谢@srtech指出这一点!)

我在构建中使用该变量的一个示例- 如果您查看已部署应用程序提供的 HTML,您会看到提交 ID 出现在最底部附近的 HTML 注释中:https://gu-who。 herokuapp.com/

/etc/heroku/dyno元数据文件(运行时)

Heroku 具有测试版功能,可以将/etc/heroku/dyno元数据文件写入正在运行的 dyno。如果您发送电子邮件支持,您可能会被添加到测试版中。这是 Heroku 自己使用它的地方:

https://github.com/heroku/fix/blob/6c8ab7a/lib/heroku_dyno_metadata.rb

内容如下所示:

{
   "dyno":{
      "physical_id":"161bfad9-9e83-40b7-b385-78305db2f168",
      "size":1,
      "name":"run.7145"
   },
   "app":{
      "id":null
   },
   "release":{
      "id":50,
      "commit":"2c3a0b24069af49b3de35b8e8c26765c1dba9ff0",
      "description":null
   }
}
Run Code Online (Sandbox Code Playgroud)

..这release.commit就是你所追求的领域。我曾经使用这种方法,直到SOURCE_VERSION变量可用。


iGa*_*ina 1

您可以在部署之前运行一个存储此信息的脚本(可能在 YAML 上)

使用这些 a = `ls` (注意不是 ' "撇号" 符号是 ` "inverse Accute" 符号)
a 变量将具有此 bash 命令的结果,
因此您可以执行 git = `git log` 然后查找您想要的信息并存储它。因此您稍后可以检索它。

这有帮助吗?