LoginSignup
11
11

More than 5 years have passed since last update.

CapistranoでのdeployをGoogle SpreadSheetに記録しちゃう

Last updated at Posted at 2014-03-17

やりたいこと

あるdeployを機にパフォーマンスやPV/売上が変ることってありますよね。最近のdeployなら追えますが、半年前のdeployってなると記憶も記録もなくて困りませんか?
そんな適当なのはウチだけですか?
deployの記録をSpreadSheetへ記録したくて、こんなもの考えました。

準備

Google Formを作成

Google SpreadSheet & Formで記録しておきたい項目のフォームを作ります。ウチではこんな項目を保存します。

  • デバイス
  • 変更概要
  • 担当者
  • リビジョン
  • タイムスタンプ(自動で記録される項目)

フォームの設定で回答は誰でもできるようにしておきましょう。
回答者が記録されるシートを閲覧できないようにしておきましょう。

Google Formから必要な情報をメモ

作成したフォームのHTMLを表示し、次の項目を控えておきます。

  • Form action URL
  • 各入力項目のname属性

Capistranoタスクを作成

deploy/配下にこんなファイルを用意します。

deploy/record_history.rb
namespace :deploy do
  task :record_history do

    prompt = HighLine.new

    this_deploy = {
      description: prompt.ask('deployによる変更概要を入力してね'),
      at: Time.now.strftime("%Y-%m-%dT%H:%M"),
      device: 'PC',
      who: `whoami`,
      memo: current_revision
    }

    uri = URI.parse("https://docs.google.com/a/dongoon.jp/forms/d/[Formによって違います]/formResponse")
    Net::HTTP.start(uri.host, uri.port, use_ssl: true){|http|
      request = Net::HTTP::Post.new(uri.path)
      params = {
        "entry.123400001" => this_deploy[:description],
        "entry.123400002" => this_deploy[:device],
        "entry.123400003" => this_deploy[:who],
        "entry.123400004" => this_deploy[:revision],
      }
      request.set_form_data(params)
      http.request(request)
    }
  end
end
config/deploy/production.rb
load 'config/deploy/record_history'
after "deploy", 'deploy:record_history'

以上で本番環境のdeployの時のみ、変更概要を入力するプロンプトが表示され、その内容がSpreadSheetに記録されちゃいます。上の例では、操作するユーザIDとdeployするリビジョンを自動的に登録しています。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11