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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Heroku应用程序中访问当前git提交号相关的知识,希望对你有一定的参考价值。

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

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

进展:

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

我试图这样做(见my fork of the ruby buildpack),但我添加的行 - line 23 - 似乎没有做这项工作。 Heroku看到并使用新的buildpack,但似乎没有将文件写入slug。

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

谢谢,

J.P

答案

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

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

这有帮助吗?

另一答案

几个选项......

SOURCE_VERSION environment variable (build-time)

自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 metadata file (run-time)

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变量可用。

另一答案

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

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

以上是关于从Heroku应用程序中访问当前git提交号的主要内容,如果未能解决你的问题,请参考以下文章

你能以编程方式访问当前的 Heroku dyno id/name 吗?

在 Heroku 上清理 git repo

GitIntelliJ IDEA 提交代码到 GitCode 远程仓库 ( GitCode 创建远程仓库 | 将本地工程推送到 GitCode 远程仓库 | 验证权限 | 生成个人访问令牌 )(代码片

Git / heroku梦魇似乎无法重置为之前的提交

如何利用git 号作为版本号 c++

嘿,我遇到了关于 git 和 heroku 的问题