guy*_*oni 40 git ruby-on-rails heroku
我想在浏览器中显示当前git提交的哈希,以便测试团队(没有运行heruko命令的访问权限)将能够在错误报告中包含相应的提交哈希.
首先我尝试了砂砾,但有些东西被打破了,它在Heroku上不起作用(在本地它很好用,我不知道为什么它在Heroku上失败了).
所以我发现Heroku上有两个环境变量:
ENV["COMMIT_HASH"]
ENV["LAST_COMMIT_BY"]
Run Code Online (Sandbox Code Playgroud)
但它们都不可用(两者都是零).
我还检查过:
heroku config
Run Code Online (Sandbox Code Playgroud)
但同样,两者都未定.
有没有办法检索哈希信息?有没有办法获得更多的git信息,例如日期?
den*_*arg 68
现在可以在没有联系Heroku的情况下尝试Roberto在他的回答中写的Heroku功能.它被称为Heroku实验室:Dyno元数据,您可以通过它启用它
heroku labs:enable runtime-dyno-metadata -a <app name>
Run Code Online (Sandbox Code Playgroud)
然后信息可用(在下次部署时)作为环境变量:
~ $ env
HEROKU_APP_ID: 9daa2797-e49b-4624-932f-ec3f9688e3da
HEROKU_APP_NAME: example-app
HEROKU_DYNO_ID: 1vac4117-c29f-4312-521e-ba4d8638c1ac
HEROKU_RELEASE_VERSION: v42
HEROKU_SLUG_COMMIT: 2c3a0b24069af49b3de35b8e8c26765c1dba9ff0
HEROKU_SLUG_DESCRIPTION: Deploy 2c3a0b2
...
Run Code Online (Sandbox Code Playgroud)
cul*_*lix 20
首先,由于在slug编译期间heroku "删除[s]未使用的文件,包括.git目录",你将无法从应用程序目录(在heroku dyno)中执行一些git命令.这包括类似的东西git rev-parse HEAD,这通常是获取当前哈希的简单方法.
其次,尝试使用git ls-remoteheroku dyno 检索信息将调用ssh,并且您将看到消息The authenticity of host 'heroku.com (50.19.85.132)' can't be established,因为heroku公钥未安装在heroku dynos上.您无权安装heroku公钥.
您仍然至少有两个选项.
添加post-commit钩子以更新哈希值.
a)创建或编辑文件.git/hooks/post-commit
b)添加一些shell脚本代码,如下所示:
hash_name = HEAD_HASH
hash = $(git rev-parse HEAD)
echo将$ hash_name设置为$ hash
heroku config:set $ hash_name = $ hash --app yourappname
(你可以使用你想要的任何git钩子代码;这只是一个选项)
说明:
HEAD_HASH是heroku环境变量的名称.随便打电话给你.您将在主应用程序中查看并在页面上显示它.git rev-parse HEAD抓取当前HEAD提交的哈希值.根据您要显示的内容自定义此行.
现在当你提交git时,HEAD_HASH每次都会更新env var.这可行,但可能有点慢,因为你每次提交时都会等待heroku设置env var.如果您的网络连接不存在,则不会更新变量.谣言是,git 1.8.2将允许一个'pre-push'钩子,你可以放置这个代码.
使用脚本来推送您的代码
git push heroku master您可以编写一个包含选项行的shell脚本,1.并git push heroku master在最后添加,而不是键入来推送您的代码.然后,要部署代码,请运行此shell脚本.这将HEAD_HASH在推送之前(而不是在每次git提交之后)更新,并且它很好地将所有内容保存在一个地方.您可能也想将脚本添加到.slugignore文件中.
小智 17
截至2015-04-01,Git SHA现在在构建过程中可用作环境变量SOURCE_VERSION.请参阅:https://devcenter.heroku.com/changelog-items/630
请注意,仅在编译步骤期间,正在运行的应用程序无法使用它.您可以添加一个自定义buildpack,将其写入一个持久存储在slug中的文件,然后从您的应用程序中读取该文件.
我正在测试这种方法,并在这里有一个实验性的buildpack:https://github.com/sreid/heroku-buildpack-sourceversion
小智 7
Heroku 容器上有一个名为的 env var SOURCE_VERSION
https://devcenter.heroku.com/articles/buildpack-api
你可以用那个!
Git> 1.8.2现在支持预推钩,这对我们的用例更好.这是我当前的钩子脚本:
#!/bin/sh
remote="$1"
url="$2"
if [[ $url =~ heroku ]] ; then
if [[ $url =~ staging ]] ; then
appname=YOUR_APP_NAME_STAGING
else
appname=YOUR_APP_NAME
fi
hash_name=COMMIT_HASH
hash=$(git rev-parse HEAD)
echo Setting $hash_name to $hash
heroku config:set $hash_name=$hash --app $appname
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9037 次 |
| 最近记录: |