adtech college#7 githubを中心とした開発フロー
TRANSCRIPT
Adtech College #7
GitHubを中心とした 開発フロー
2014年12月4日 山田直行 アドテクスタジオ Smalgo
目次
❖ Smalgoでのタスク管理システムとしてのGitHub
❖ Pull Requestとレビュー
❖ Jenkinsでの自動テスト・ビルド
❖ Slackとの連携
❖ 開発/リリースフローとgitのブランチ
Smalgoについて
❖ Smalgo ❖ スマホ向け成果報酬課金DSP ❖ RTBと第三者配信
❖ リリース回数 ❖ 平均3.5回/週(106回÷30週)
❖ Pull Request ❖ 平均5個/日(502個÷86日)
SmalgoのGitHubレポジトリ
❖ https://github.com/xxxxxxxx/xxxxxxxx ❖ 配信、管理画面、インフラまで全てこの1つのレポジトリに集約
Issue
❖ 開発タスク・バグ報告などは全てここに上げる
❖ [PACE] などのようにタイトルにPrefixをつけるルール
❖ ラベル・担当者・マイルストーンとひもづける
Milestones
❖ タイトル・説明・期限の3つを設定可能
❖ Issueとひもづける ❖ 大きな粒度の開発項目 ❖ 数日~2週間で取り組む大きさ
HuBoardを使って全体管理❖ https://huboard.com
Wiki
❖ GitHubのWikiはそれ自体がgitレポジトリになっている
❖ Markdownで記述 ❖ Issueとは違って、ずっと使い続けるような情報をストックする場所
❖ プロジェクトのイントロダクション・開発環境構築方法・運用マニュアル・仕様の整理など
Pull Request❖ Issueに対応する開発ができたらそれをPull Requestとして上げる
❖ レビューラベル「レビュー依頼」「レビュー中」「レビュー完了
❖ smalgo-lotto (くじでレビュワーを決める)
レビュー・マージ❖ レビューはなるべく偏らないようにしていて、詳しくない場所でもレビュワーを担当する
❖ 基本レビュワーは1人だが、重要な箇所は複数人が見る
❖ LGTM(Looks Good To Me)サインをもらい、Pull Requestを出した本人がマージする
❖ masterブランチまたはfeature/*ブランチへのPull Request。masterにマージされたものは ”リリースready”
Jenkinsでの自動ビルド❖ マージをHookしてビルドが走る
❖ Pull Request BuilderでPull RequestをHookしてビルドもしている→テストが通らないものはマージしない
Slackとの連携❖ 通常のチャットのチャンネルとは別にnotification用チャンネルがあり、GitHubとJenkinsの通知を流している
開発・リリースフロー❖ masterブランチまたはfeature/*ブランチに向けたPull Requestがマージされると、Jenkinsでビルドが走る
❖ ビルドが完了すると、development環境にデプロイ可能なパッケージ(arfifact)がzipファイルにまとめられてS3にアップロードされる
❖ fabricコマンドでホスト別・ロール別にデプロイ
master release
RC-xxxxfeature/xxxx
Before Aftermaster
2014-xxxx-xxxx
2014-xxxx-xxxx
2014-xxxx-xxxx
2014-xxxx-xxxx
masterブランチ+tagのみmaster=開発用、かつリリースしてよいもの!release=リリース済みのもの
feature/xxxx
gitのブランチ
stagingへのリリース手順❖ https://github.com/xxxxxxxxxxxx/wiki/Release手順
❖ Jenkinsの「stagingビルド」ジョブを実行↓
❖ GitHub上にリリース用Issueが作成され、Pre-releaseフラグでreleaseが自動で作成される↓
❖ リリース担当者はリリース内容を確認し、リリース手順を整理して、staging確認内容を全体に通知する↓
❖ stagingビルドが終わるとSlackに通知される
productionへのリリース手順❖ stagingにデプロイして確認を行う ↓
❖ Jenkinsで「productionビルド」ジョブを実行↓
❖ productionビルドが終わるとSlackに通知される↓
❖ production環境にデプロイする ↓
❖ リリース用IssueをCloseしてリリース完了
リリースごとのリリースノート作成を自動化し、 各リリースをgitのtag, GitHubのrelease機能と連動させている
❖ リリースノートはマージされたPull Requestのリスト
❖ 各Pull RequestとリリースIssueへのリンクを付ける
❖ datetimeをベースとしたtag名
❖ 緑はreleased(リリース済み)、オレンジはPre-release(staging止まり)
❖ リリースを自動更新するRakeタスクこれをJenkinsのジョブ内で実行https://github.com/xxxxxxxxxxxxx