我知道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
答案 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>