デプロイを便利にするソリューションであるところのrelease-request

release-request

https://github.com/mackee/release-request


The release-request is a cli tool for Pull Request driven deployment.


demo

https://github.com/mackee/release-request/pull/3

image.png


何が出来るか

  • deployのPull Requestを自動作成してくれる
  • マージされたPull Requestをリスト化してくれる
  • 特定のラベルが付けられたPull Requestをリスト化してくれる
  • 差分を外部プログラムに渡してテンプレートから手順書を入れたり抜いたり出来る

先行するOSS


先行するOSSと比べて優位な点

  • ワンコマンドで完結
  • 外部プログラムは言語に依存しない
  • デフォルトでもある程度機能する

挙動

  • 実行すると
    • 既に指定ブランチから指定ブランチへのPull RequestがあればDescriptionを上書きする
    • 無ければ新しく作る
  • 弊社ではwebhookが来ると外部コマンドを実行するtkuchiki/ghooks-cmd-runnerと組み合わせてmasterブランチへのpushをトリガーに走るようにしている

工夫

  • 設定が必要であるが、テンプレートを吐いてくれる

https://asciinema.org/a/9MPHTp9xKyRMnDbVlq7o8yaHN


設定ファイル

  • config.yml
    • githubのtokenとかブランチとかトラッキングするラベルとか
  • release.md
    • Pull Requestのテンプレート

外部プログラムの例

calls:
  - name: deploy_timing
    command: |
      perl -MTime::Piece -E '
      my $now = Time::Piece->new;
      for my $hms (qw/16:30:00 19:45:00 23:45:00/) {
          next if $now->hms gt $hms;
          say $now->ymd . " " . $hms;
          last;
      }'

外部プログラムをMarkdownから使う

上記のプログラムを組み合わせてデプロイウィンドウの明記を手順書に盛り込んでいる

# Release

Estimated time of deploying: {{ .Call "deploy_timing" }}


DDLの差分があったら反映の手順書を入れる

  - name: has_ddl
    command: |
      perl -MJSON -E '
      my $json = do { local $/; <STDIN> };
      my $releaser = JSON::decode_json($json);
      my $files = $releaser->{comparison}->{files};
      my @assets = grep { $_->{name} =~ m!^sql/master.sql.*$! } @$files;
      @assets > 0 ? exit 0 : exit 1;
      '

DDLの差分があったら反映の手順書を入れる

{{ with .CallIf "has_ddl" -}}
- [ ] migrate ddl

    $ git_ddl_migrater sql/master.sql
{{ end }}

解決する問題

  • デプロイするものを整理してデプロイ前の把握と、デプロイした後の記録にしたい
  • しかし言うてもその手間がしんどい
  • 手順書のクオリティを一定にしたい

と言う感じで使ってくれ!!!


あとOSS紹介Advent Calendarやってます

https://qiita.com/advent-calendar/2017/favorite-oss

登録してくれ!!!

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.