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

时间:2012-08-31 14:41:00

标签: ruby git heroku sinatra buildpack

我知道slug compiler在创建heroku slug时删除了.git目录,但有没有办法配置Heroku以便我可以从我的脚本中访问当前运行的git提交号? / p>

我希望能够在我的sinatra应用程序(在Heroku中运行)上建立一个小链接,其中包含"运行version e72fb274a0" (或类似的东西)。如何检索它,或强制slug编译器将其添加到环境变量?

进展:

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

我已经尝试过这样做(请参阅my fork of the ruby buildpack),但我添加的行 - line 23 - 似乎并没有完成这项工作。 Heroku看到&使用新的buildpack,但似乎没有把文件写入slug。

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

谢谢,

JP

3 个答案:

答案 0 :(得分:4)

有几种选择......

SOURCE_VERSION环境变量(构建时)

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

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

(感谢@srtech pointing that out!)

example of me using that variable in a build - 如果您查看已部署应用提供的HTML,您会看到提交ID即将出现在最底层附近的HTML评论中:https://gu-who.herokuapp.com/

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

Heroku具有 beta 功能,可以在运行的dyno上写出/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变量可用。

答案 1 :(得分:1)

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

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

这有帮助吗?

答案 2 :(得分:0)

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

heroku labs:enable runtime-dyno-metadata -a <app name>