45

現在のgitcommitのハッシュをブラウザーに表示して、テストチーム(herukoコマンドを実行するためのアクセス権がない)が対応するcommitハッシュをバグレポートに含めることができるようにします。

最初にグリットを試しましたが、何かが壊れていて、Herokuでは機能しません(ローカルではうまく機能しますが、Herokuで失敗する理由はわかりません)。

そこで、Herokuには2つの環境変数があることがわかりました。

ENV["COMMIT_HASH"]
ENV["LAST_COMMIT_BY"]

しかし、どちらも利用できません(どちらもゼロです)。

私もチェックしました:

heroku config

しかし、繰り返しますが、どちらも設定されていません。

ハッシュ情報を取得する方法はありますか?たとえば日付など、より多くのgit情報を取得する方法はありますか?

4

9 に答える 9

96

Herokuに連絡しなくても、Robertoが回答で書いたHerokuの機能を試すことができるようになりました。これはHerokuLabs:Dynoメタデータと呼ばれ、次の方法で有効にできます。

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

次に、情報は環境変数として(次のデプロイで)利用可能になります。

~ $ 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
...
于 2015-12-30T19:58:17.673 に答える
24

まず、slugのコンパイル中にherokuが「.gitディレクトリを含む未使用のファイルを削除」するため、アプリのディレクトリ内(heroku dyno上)から一部のgitコマンドを実行できなくなります。これにgit rev-parse HEADは、通常、現在のハッシュを取得する簡単な方法であるなどが含まれます。

次に、heroku dynoで情報を取得しようとすると、sshが呼び出され、heroku公開鍵がheroku dynoにインストールされていないため、git ls-remoteというメッセージが表示されます。The authenticity of host 'heroku.com (50.19.85.132)' can't be establishedheroku公開鍵をインストールする権限がありません。

まだ少なくとも2つのオプションがあります。

  1. コミット後のフックを追加して、ハッシュ値を更新します。

    a)ファイルを作成または編集します.git/hooks/post-commit
    b)次のようなシェルスクリプトコードを追加します。

    hash_name = HEAD_HASH
    hash = $(git rev-parse HEAD)
    echo $hash_nameを$hashに設定
    herokuconfig:set $ hash_name = $ hash --app yourappname

    (gitフックには任意のコードを使用できます。これは1つのオプションにすぎません)

    説明:

    • HEAD_HASHheroku環境変数の名前です。好きなように呼んでください。これをメインアプリで調べて、ページに表示します。
    • git rev-parse HEAD現在のHEADコミットのハッシュを取得します。表示したいものに合わせてこの行をカスタマイズします。


    これで、gitにコミットすると、HEAD_HASHenv変数が毎回更新されます。これは機能しますが、コミットするたびにherokuがenv varを設定するのを待つため、少し遅くなる可能性があります。ネットワーク接続が切断されている場合など、変数は更新されません。噂によると、git 1.8.2では、代わりにこのコードを配置できる「プレプッシュ」フックが許可されます。

  2. スクリプトを使用してコードをプッシュする

    コードをプッシュするために入力する代わりに、オプションの行を含み、最後に追加git push heroku masterするシェルスクリプトを作成できます。次に、コードをデプロイするために、このシェルスクリプトを実行します。これは、(各git commitの後ではなく)プッシュする前にのみ更新され、すべてを1か所にうまく保持します。おそらく、ファイルにもスクリプトを追加することをお勧めします。1.git push heroku masterHEAD_HASH.slugignore

于 2013-02-17T19:09:31.923 に答える
20

2015-04-01の時点で、GitSHAはビルドプロセス内で環境変数SOURCE_VERSIONとして使用できるようになりました。参照:https ://devcenter.heroku.com/changelog-items/630

実行中のアプリでは使用できず、コンパイル手順中のみ使用できることに注意してください。カスタムビルドパックを追加して、これをスラッグに保持されるファイルに書き込み、アプリケーションからファイルを読み取ることができます。

私はそのアプローチをテストしていて、ここに実験的なビルドパックがあります:https ://github.com/sreid/heroku-buildpack-sourceversion

于 2015-04-03T04:00:23.037 に答える
7

Herokuコンテナにはenvvarと呼ばれるものがありますSOURCE_VERSION

https://devcenter.heroku.com/articles/buildpack-api

あなたはそれを使うことができます!

于 2019-03-06T19:29:20.480 に答える
6

git ls-remote heroku私のために働きます。私はここで重複した質問への回答からこれを得ました。

于 2013-07-12T14:13:48.420 に答える
6

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
于 2014-03-28T01:02:31.583 に答える
2

culixとjoshwaの両方に素晴らしい答えがあります。heroku gitリモコンに対応するherokuアプリと同じ名前を付けると、さらに短く、より堅牢な.git/hooks/pre-pushフックを使用できます。

#!/bin/bash

remote="$1"
url="$2"

if [[ $url =~ heroku ]] ; then
    hash_name=COMMIT_HASH
    hash=$(git rev-parse HEAD)
    echo Setting $hash_name to $hash on app $remote
    heroku config:set $hash_name=$hash --app $remote
fi

exit 0
于 2014-07-15T04:30:04.767 に答える
2

CIを使用していて、そこでHerokuクライアントにアクセスできない場合は、HerokuAPIを直接使用することもできます。

これは、codeship.comで使用したソリューションです(環境内のハッシュを次のように提供します$CI_COMMIT_ID

# you can use `heroku auth:token` to generate this
HEROKU_API_KEY="" 

APP_NAME="glorious-flying-birds"

curl -n -X PATCH "https://api.heroku.com/apps/$APP_NAME/config-vars" \
  -H "Authorization: Bearer $HEROKU_API_KEY" \
  -H "Accept: application/vnd.heroku+json; version=3" \
  -H "Content-Type: application/json" \
  -d "{\"GIT_COMMIT_HASH\": \"$CI_COMMIT_ID\"}"
于 2015-03-20T22:34:13.740 に答える
2

Herokuには、dynoメタデータをサポートする新しい機能があります。サポートにメールを送信すると、おそらくベータ版に追加される可能性があります。Heroku自体が使用している場所は次のとおりです。

https://github.com/heroku/fix/blob/6c8ab7a/lib/heroku_dyno_metadata.rb

追加機能により、JSONファイルが次/etc/heroku/dynoのように書き出されます。内容は次のようになります。

{
   "dyno":{
      "physical_id":"161bfad9-9e83-40b7-b385-78305db2f168",
      "size":1,
      "name":"run.7145"
   },
   "app":{
      "id":null
   },
   "release":{
      "id":50,
      "commit":"2c3a0b24069af49b3de35b8e8c26765c1dba9ff0",
      "description":null
   }
}

..sorelease.commitはあなたが求めている分野です。

于 2015-10-21T12:38:14.377 に答える