現在アクティブなデプロイの時間を追跡するために、環境変数または何かを更新したいと思います。Heroku のアプリ内からこれを自動的に行う方法はありますか?それとも、デプロイ スクリプトの一部として行う必要がありますか? 理想的には、CI に TDDium を使用して動作し、ビルドが成功したときに Heroku にプッシュしてくれるものが欲しいです。
3 に答える
Heroku で環境変数を使用する
Heroku のconfig-varsを使用できます。これらは実際には、Heroku CLI を介して構成する単なる環境変数です。たとえば、現在の日付を DEPLOY_TIMESTAMP という名前の環境変数に格納できます。
heroku config:add DEPLOY_TIMESTAMP=$(date)
これで、アプリケーション内またはコマンド ラインからこの環境変数にアクセスできるようになります。この値には、Rails アプリケーションから、またはローカル プロジェクト ディレクトリからENV['DEPLOY_TIMESTAMP']
の出力を解析することによってアクセスできます。heroku config
エイリアスによる自動化
これをある程度自動化したい場合は、Git エイリアスを作成して Heroku にプッシュし、同時に DEPLOY_TIMESTAMP を更新できます。pushのような実際の Git コマンドの名前を上書きすることはできませんが、 pushstampなどのカスタム アクションを追加することはできます。例えば:
git config alias.pushstamp \
'! git push heroku master; heroku config:add DEPLOY_TIMESTAMP=$(date)'
関連項目
読み取り専用の Heroku ファイルシステム内のファイルのタイムスタンプを調べると、前回のデプロイ時刻を確認できます。
これらのタイムスタンプを ls で直接確認することで、これを確認できます。実行中の例heroku run rails c
:
irb(main):003:0> puts `ls -la`
total 96
drwx------ 14 u51199 51199 4096 May 14 22:49 .
drwxr-xr-x 15 root root 4096 Mar 20 09:43 ..
drwx------ 10 u51199 51199 4096 May 7 02:12 app
drwx------ 2 u51199 51199 4096 May 7 02:17 bin
drwx------ 2 u51199 51199 4096 Mar 14 22:12 .bundle
drwx------ 5 u51199 51199 4096 May 7 02:12 config
-rw------- 1 u51199 51199 226 May 7 02:12 config.ru
drwx------ 3 u51199 51199 4096 May 7 02:12 db
-rw------- 1 u51199 51199 1138 May 7 02:12 Gemfile
-rw------- 1 u51199 51199 11456 May 7 02:12 Gemfile.lock
-rw------- 1 u51199 51199 542 May 7 02:12 .gitignore
drwx------ 5 u51199 51199 4096 May 7 02:12 lib
drwx------ 2 u51199 51199 4096 May 7 02:17 log
-rw------- 1 u51199 51199 57 May 7 02:12 Procfile
drwx------ 2 u51199 51199 4096 May 7 02:13 .profile.d
drwx------ 3 u51199 51199 4096 May 7 02:17 public
-rw------- 1 u51199 51199 249 May 7 02:12 Rakefile
-rw------- 1 u51199 51199 613 May 7 02:12 README.md
-rw------- 1 u51199 51199 31 May 7 02:12 .rspec
drwx------ 7 u51199 51199 4096 May 7 02:12 spec
drwx------ 3 u51199 51199 4096 May 7 02:18 tmp
drwx------ 6 u51199 51199 4096 May 7 02:13 vendor
その結果、アプリが最後にいつデプロイされたかを知りたい場合はFile.mtime
、実際のTime
オブジェクトを使用して取得できます。
irb(main):009:0> File.mtime("app")
=> 2015-05-07 02:12:57 +0000
irb(main):010:0> File.mtime("app").class
=> Time
1.デプロイスクリプト/タスクを作成しない限り、Herokuにデプロイする際の自動メソッドはありません。(私も2012年6月にこれを検索しました)。デプロイを行うrakeタスクがあり、その一部がGIT_TAGを設定し、私のWebページ(Railsのアプリケーションレイアウト)がそれをページに出力します。
Heroku GIT_TAG構成変数に書き込む方法は次のとおりです(RailsベースのRakeタスクを使用)。
tag = `git describe master --always`.strip
`heroku config:add GIT_TAG=#{tag} --app XXXX`
2. tddiumの場合:tddiumは「ビルド後フック」をサポートするようになりました。標準バージョンを拡張して、そのプロセス中にGIT_TAGを設定します。最初にhttp://blog.tddium.com/2012/05/09/heroku-continuous-deployment/を読んでフォローし、「post_build_hook」タスクにタグを読み取るための何かを追加して、次のようにherokuconfigvarを設定します。
namespace :tddium do
def cmd(c)
system c
end
desc "post_build_hook to deploy to dfc-site-qa"
task :post_build_hook do
...use code verbatim from above URL (https://www.tddium.com/support/reference#customization)
...
current_tag = `git describe master --always`.strip
cmd "heroku config:add GIT_TAG=#{current_tag} --app XXXX" or puts "could not set GIT_TAG to #{current_tag}"
...
end
ノート:
必要に応じて、上記の「マスター」に置き換えてください。私のデプロイレーキタスク(共有して幸せ)では、ブランチまたはタグに基づいてデプロイすることを許可します(マスターからのみデプロイしたいというherokuの要望を回避するのに便利です)。
tddiumに「post_build_hook」を実行させるには、次のコマンドを実行して、デプロイ後のURLを非アクティブ化する必要があります。tddiumsuite --edit
「pullurl」には現在の値を使用しますが、「pushurl」は空白(またはデフォルト)に設定します。このステップはブログリンクに記載されていません。
現在のビルドのtddiumWebページに、post_deploy_hookログファイル(ページの一番下)へのリンクが表示されます。このログファイルを開いて、どのように実行されたかを確認できます(rakeタスクのデバッグ)。