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

我知道slug编译器在创建一个heroku slug时会删除.git目录,但是有没有办法配置Heroku以便我可以从我的脚本中访问当前运行的git commit编号?

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

进展:

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

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

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

谢谢,

J.P

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

使用这些a =`ls`(注意不是”撇号’符号是’“反向”符号)
一个变量将具有此bash命令的结果,
所以你可以做git =`git log`,然后找到你想要的信息并存储它。 所以你以后可以检索它。

这有帮助吗?

几个选项……

SOURCE_VERSION环境变量(构建时)

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

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

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

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

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

Heroku具有betafunction,可以将/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 } } 

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

在2018年,这就是你想要的: https : //devcenter.heroku.com/articles/dyno-metadata

 heroku labs:enable runtime-dyno-metadata -a