Edited at

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

More than 5 years have passed since last update.


やりたいこと

ある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するリビジョンを自動的に登録しています。