adtech college#7 githubを中心とした開発フロー

17
Adtech College #7 GitHubを中心とした 開発フロー 2014年12月4日 山田直行 アドテクスタジオ Smalgo

Upload: naoyuki-yamada

Post on 14-Jul-2015

500 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Adtech College#7 GitHubを中心とした開発フロー

Adtech College #7

GitHubを中心とした 開発フロー

2014年12月4日 山田直行 アドテクスタジオ Smalgo

Page 2: Adtech College#7 GitHubを中心とした開発フロー

目次

❖ Smalgoでのタスク管理システムとしてのGitHub

❖ Pull Requestとレビュー

❖ Jenkinsでの自動テスト・ビルド

❖ Slackとの連携

❖ 開発/リリースフローとgitのブランチ

Page 3: Adtech College#7 GitHubを中心とした開発フロー

Smalgoについて

❖ Smalgo ❖ スマホ向け成果報酬課金DSP ❖ RTBと第三者配信

❖ リリース回数 ❖ 平均3.5回/週(106回÷30週)

❖ Pull Request ❖ 平均5個/日(502個÷86日)

Page 4: Adtech College#7 GitHubを中心とした開発フロー

SmalgoのGitHubレポジトリ

❖ https://github.com/xxxxxxxx/xxxxxxxx ❖ 配信、管理画面、インフラまで全てこの1つのレポジトリに集約

Page 5: Adtech College#7 GitHubを中心とした開発フロー

Issue

❖ 開発タスク・バグ報告などは全てここに上げる

❖ [PACE] などのようにタイトルにPrefixをつけるルール

❖ ラベル・担当者・マイルストーンとひもづける

Page 6: Adtech College#7 GitHubを中心とした開発フロー

Milestones

❖ タイトル・説明・期限の3つを設定可能

❖ Issueとひもづける ❖ 大きな粒度の開発項目 ❖ 数日~2週間で取り組む大きさ

Page 7: Adtech College#7 GitHubを中心とした開発フロー

HuBoardを使って全体管理❖ https://huboard.com

Page 8: Adtech College#7 GitHubを中心とした開発フロー

Wiki

❖ GitHubのWikiはそれ自体がgitレポジトリになっている

❖ Markdownで記述 ❖ Issueとは違って、ずっと使い続けるような情報をストックする場所

❖ プロジェクトのイントロダクション・開発環境構築方法・運用マニュアル・仕様の整理など

Page 9: Adtech College#7 GitHubを中心とした開発フロー

Pull Request❖ Issueに対応する開発ができたらそれをPull Requestとして上げる

❖ レビューラベル「レビュー依頼」「レビュー中」「レビュー完了

❖ smalgo-lotto (くじでレビュワーを決める)

Page 10: Adtech College#7 GitHubを中心とした開発フロー

レビュー・マージ❖ レビューはなるべく偏らないようにしていて、詳しくない場所でもレビュワーを担当する

❖ 基本レビュワーは1人だが、重要な箇所は複数人が見る

❖ LGTM(Looks Good To Me)サインをもらい、Pull Requestを出した本人がマージする

❖ masterブランチまたはfeature/*ブランチへのPull Request。masterにマージされたものは ”リリースready”

Page 11: Adtech College#7 GitHubを中心とした開発フロー

Jenkinsでの自動ビルド❖ マージをHookしてビルドが走る

❖ Pull Request BuilderでPull RequestをHookしてビルドもしている→テストが通らないものはマージしない

Page 12: Adtech College#7 GitHubを中心とした開発フロー

Slackとの連携❖ 通常のチャットのチャンネルとは別にnotification用チャンネルがあり、GitHubとJenkinsの通知を流している

Page 13: Adtech College#7 GitHubを中心とした開発フロー

開発・リリースフロー❖ masterブランチまたはfeature/*ブランチに向けたPull Requestがマージされると、Jenkinsでビルドが走る

❖ ビルドが完了すると、development環境にデプロイ可能なパッケージ(arfifact)がzipファイルにまとめられてS3にアップロードされる

❖ fabricコマンドでホスト別・ロール別にデプロイ

Page 14: Adtech College#7 GitHubを中心とした開発フロー

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のブランチ

Page 15: Adtech College#7 GitHubを中心とした開発フロー

stagingへのリリース手順❖ https://github.com/xxxxxxxxxxxx/wiki/Release手順

❖ Jenkinsの「stagingビルド」ジョブを実行↓

❖ GitHub上にリリース用Issueが作成され、Pre-releaseフラグでreleaseが自動で作成される↓

❖ リリース担当者はリリース内容を確認し、リリース手順を整理して、staging確認内容を全体に通知する↓

❖ stagingビルドが終わるとSlackに通知される

Page 16: Adtech College#7 GitHubを中心とした開発フロー

productionへのリリース手順❖ stagingにデプロイして確認を行う ↓

❖ Jenkinsで「productionビルド」ジョブを実行↓

❖ productionビルドが終わるとSlackに通知される↓

❖ production環境にデプロイする ↓

❖ リリース用IssueをCloseしてリリース完了

Page 17: Adtech College#7 GitHubを中心とした開発フロー

リリースごとのリリースノート作成を自動化し、 各リリースをgitのtag, GitHubのrelease機能と連動させている

❖ リリースノートはマージされたPull Requestのリスト

❖ 各Pull RequestとリリースIssueへのリンクを付ける

❖ datetimeをベースとしたtag名

❖ 緑はreleased(リリース済み)、オレンジはPre-release(staging止まり)

❖ リリースを自動更新するRakeタスクこれをJenkinsのジョブ内で実行https://github.com/xxxxxxxxxxxxx