6

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

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

进步:

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

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

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

谢谢,

J.P

4

3 回答 3

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 具有beta功能,可以将/etc/heroku/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
   }
}

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

于 2015-02-25T12:20:52.017 回答
3

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

heroku labs:enable runtime-dyno-metadata -a <app name>
于 2018-03-02T16:50:09.010 回答
1

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

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

这有帮助吗?

于 2012-08-31T15:06:23.080 回答