1.9K Views
October 09, 24
スライド概要
CI & CD Write by 森理麟15/12/13 ゲーム開発環境勉強会@関西#3
Myself HN:森理 麟(@moririring) 職業:プログラマ 著書: Unity5 3Dゲーム開発講座 表彰:Microsoft MVP サイト: http://karaage.click 2
継続的インテグレーション(以 下CI)とは、アプリ作成時の品 質改善や納期短縮の習慣 Continuous Integration Develop Source Test Build 3
継続的デリバリー(以下CD)と は、どのビルドでも一発で、 短時間にリリース出来ること Continuous Delivery Test Release Deploy Build 4
現在の開発でCI、CDの導入は 着実に増えている CIツール、CI サービス Jenkins TravisCI, CircleCI Bamboo, TeamCity Visual Studio Online, AppVeyor 5
僕はCI,CDツールを自作した。 本日はその工程で得られた CI,CD実践するポイントを説明 インハウスCI ツール 6
今日のゴール CI,CDを「知らない」人は、何故 CI,CDが必要か? CI,CDを「普及させたい」人は、 そのポイント CI,CDが「当たり前」な人は、応 用出来そうな知見 聞いてくれた人が何かを持って 帰ってもらえると嬉しい。出来 れば、僕に共有してください! 7
1/4.CI m 8
デイリービル ド作成開始 最初は、森理がCIを導入した きっかけのお話し この時は寧ろ、CIという単語 も知らず、困ったから改善を しただけ 9
メインプログ ラマとの会話 「朝、会社に来てビルドエ ラーだと困りません?」 「困ります!」 「どうにかなりませんか?」 「デイリービルドって単語が ありますよね。あれ、作って みましょうか?」 10
朝一でエラーが出ると困るし、 二次被害も起きやすい。また モチベーションにも影響する ソースを落と してエラーだ と 11
デイリービルドという単語か ら想像できるもの以上の知識 はなし この時のデイ リービルドの 知識 デイリーにする ビルド? 12
次の日から早速デイリービル ドを作成。が、正直何をすれ ば良いのかさっぱり分からず デイリービル ド作成開始 13
当時バージョン管理に使って いたのがTortoiseSVN。検索し て見つけたあるページ 画像引用 : 付録D TortoiseSVN の自動化 TortoiseSVN 14
書いてあるとおりにしたら TortoiseSVNが更新! コマンド コマンドライン 15
当時使っていたIDEもマニュア ルを読んだらスクリプトでビ ルド出来そうだった CodeWarrior 16
こうしてソースを落としてIDE でビルドして、ログを出力で きるスクリプトが完成 VBScript TortoiseSVN更新 ビルド→ログ出力 17
タスクスケジューラーを使っ て、深夜0:00にスクリプトを 叩くようにした タスクスケ ジューラー 0:00 18
ログをHP上で見えるようにし た trac 19
想像していたデイリービルド はこれにて完成! デイリービル ドの完成 20
使ってみたメインプログラマ の一言 メインプログ ラマの一言 ログを見るのが面倒です 21
スクリプトでログファイルを パース。エラーがあれば赤、 なければ緑で表示 NUnitカラー 22
デイリービル ドの結果 こうして、朝一、エラーが分 かるようになった。 これでも立派なCI。最初はこ れぐらい小さく始めるべき。 23
CIのコツ
「コマンドライン+ツール名」 で調べること。大体のツール はそれで自動化の方法が出る 自動化のポイ ント 25
バッチはワンクリックで終わ るように作ること 自動化のポイ ント 作業1 作業1 作業2 作業3 作業2 作業3 26
ワンクリックで作っておけば、 タイマーなどでキックして自 動で運用出来る 自動化のポイ ント 0:00 TortoiseSVN更新 IDEビルド 27
まとめ CIはエラーを見えない状態から見え る状態にする。見える状態は問題が 一番楽な状態で取りかかれる CIは悪い状態を回避出来るだけでな く、良い状態を維持出来るようにな る。すると良い循環が生まれる 時間のかかる処理を自動化する事で 本当に集中したいことに時間を割け る。さらに良い循環が生まれる CIを導入してプロジェクトに良い循 環を作ろう! 28
2/4. CD m 29
デイリービル ド作成開始 CIが導入されて、機能追加を 繰り返していたら必然的にCD 環境も整っていった。次はそ のお話 30
CI導入後、チェック用DVDが 必要になったので、プログラ マが交代で作っていた プロジェクト 中盤の出来事 31
これが結構大変トラブルがあ ると丸一日潰れる事もあった DVD作成 32
CIツールでReleaseビルドも チェックするようにした Releaseチェッ ク 33
さらにDVDを作る工程全てを、 深夜スクリプトにまとめた DVD作成 TortoiseSVN更新 IDEビルド DVD作成バッチ 34
朝、自動的にDVDが完成して いる状態に!これもCD! DVD自動化 35
プロジェクトで使っていくと 問題点も徐々に出てきた 問題点 状況に応じてON、OFFを手軽に 変更したい 機能を増やしたいがScriptでは 無理 動き出した後でも止められるよ うにしたい 36
そこでプロジェクトが終わっ たタイミングで、新たに作り 直すことに 作り直し 37
Windowsプロ グラム WindowsプログラミングでUIが必 要なので.NET Frameworkでの作 成を選択 最初C++/CLIを使ってみるも自分 的には気持ち悪い C#を使ってみると手になじむし GUIが作りやすい。無料なのに、 以前好きだったBorlandC++以上 後にVisual Studio C#とBorlandC++ は両方とも同じ人が作ったと知 る 38
C#の父と ツーショット 39
デイリービル ドフレンズ バッチ処理やVisualStudio起動、 TortoiseSVN更新などのコマン ドをいくつでもタスクに登録 可能。 タスクには名前が付けられて、 複数タスクの登録も可能。 ボタンを押すと上から順番に コマンドを処理して経過をロ グとして出力 40
バッチ実行は内容をパースし てpauseをスルー。地味に便利 バッチpause スルー機能 pauseがあってもスルー 41
0:00などの時間指定だけでな く15分や120分などの間隔指定 も可能に インターバル 機能 インターバル タイマー 0:00 1日 目 0:00 2日 目 0:00 3日 目 0:00 4日 目 0:00 5日 目 0:00 6日 目 0:00 20:00 4:00 16:00 8:00 12:00 42
インターバルではバージョン 管理の変更時のみキックする ように 変更時更新機 能 キック 20:00 33 16:00 31 0:00 30 12:00 31 4:00 30 8:00 31 キック 43
さらに、プログラマ以外の確 認方法をリサーチ プログラマの 自席で確認 DVDでチェッ ク Visual Studioビ ルド • 行くタイミ ングが難し い • 出来まで1日 から数日か かる • エラー対応 が難しい 44
Visual Studioから実行しなくて も、実行ファイルとリソース があれば動くことが分かった 実行ファイル の実行方法 Visual Studio 実行 可能 バー ジョン 管理 実行 ファイ ル 実行 可能 リソー ス 45
CIツールにまとめてアップ ロードする機能とダウンロー ドする機能を入れた アップロード &ダウンロー ド リソー ス 実行 ファイ ル その他 アップ ロード リソー ス 実行 ファイ ル その他 ダウン ロード 46
プログラマ以外にCIツールを 配布。更新、実行などボタン を押すだけで使えた デザイナへ配 布 47
VSなしでチェック可能。しか も自席でトライ&エラーも出 来る!これもCD! デザイナ自立 48
CDのコツ
CIなら常に実行ファイルが作 られるし、エラー番号も分か る。これはCDでも重要。 リアルタイム CIの恩恵 30 成 功 31 成 功 32 成 功 33 成 功 34 失 敗 35 失 敗 50
ワンクリックなら操作説明が 不要。内容に変更があっても 操作が同じ。GUIと相性が良い ワンクリック 51
CI,CDでは、レスポンスよく チェックしたいものと完全に チェックしたいものがある リアルタイム とナイトリー git 通知 pull IM Visual Studio git 通知 リビル ド clone メール Visual Studio リアルタイム ビルド ナイトリー 52
アップロードとダウンロード 機能を入れるとCDが実現。専 用のツールでなくても可能 CI+(アップ ロード+ダウ ンロード)=CD Test Release Deploy Build 53
C#は最高なので、C#を使う I ♡ C# 54
まとめ CIしていれば、CDで必要なものは 既にある。CDのやり方はバッチで も良い 時間のかかるものは1日1回、かか らないものはリアルタイムに更新し て配布 ワンクリックは作り手にも使い手に も大きなメリットがある CIで作った良い循環がプログラマだ けでなくチームへと拡大していく。 チームにCDを取り入れよう! 55
3/4. 普及 u 56
作成よりも普 及 CI,CDを導入して、効果はあっ たが、実は作成よりも普及や 運用させるハードルの方が高 かった 57
CIでエラーは見える状態。ロ グも見やすいように工夫。で も、見てもらえるかは別の話 見やすければ 見るか? 58
メールなどでログ設置の連絡 をしてもスルーする人はいる ログの連絡 59
エラーを出す人に限ってメー ルを見てなかったり。修正に 時間がかかる事も多かった エラーあるあ る 60
エラーの場合はログを抽出し て手動でメールを送ってくれ る人が出てきた。 ピックアップ メール 61
エラーなら修正されるリズム が出来てきたので、エラー メールも自動化 修正リズムの 確立 エラー時 TortoiseSVN更新 IDEビルド DVD作成バッチ 62
エラーはかなり減ったので、次に 警告数も出すようにした。フルビ ルドなので数も正確 ログに警告 63
しかしこちらは更になかなか直ら なかった。メインプログラマと警 告ゼロキャンペーンを発動 ワーニングゼ ロキャンペー ン 64
プロジェクト全体で10000個以 上あった警告が0個になった日 は拍手が起こった ゼロデーの朝 礼 65
運用
パソコンの確 保 最初は自分のパソコンから始めた。 タイマーで深夜なら(殆ど)負担も ない チームにとって価値が認められると、 低スペックでも専用機を用意してく れるケースも DVD作成機や共有機など必須の専用 パソコンで併用して運用するのも手 長年やるので長期計画でPCは確保。 予算確保時やPCの買い替え時期に 確保して全部使っている 67
CIは基本的に毎日自動的に動 作する。ではCIはスクリプト さえ作れば、何もしなくて良 いか? CIの運用 68
CIはサーバー と同じ 自動化されている分、手間は 少ないが、CIは動き続けてい るのが絶対。放置で運用は難 しい 69
運用の問題点 バージョン管理の衝突やbatの pause WindowsのUpdate、パスワード の定期変更 連絡漏れによる電源切断や夜間 停電 ツールやSDKのバージョンアッ プ よく分からないけれど起こるエ ラー 70
まとめ
作った人以上に内容を分かっ ている人はいない。使っても らう努力はとても大事 普及のコツ 72
チームに修正するリズムを作 るのがポイント。その際、人 のフォローはかなり重要 普及のコツ 73
自動メールはスルーされやす い。無駄に投げるとすぐノイ ズになる 自動メールの コツ 内容 ポイント 件名 本文を見なくても大事なことは把握出来るように (タスク名や成功か失敗か) 詳細なエラー情報もしくはログページへのリンク 本文 通知条件 通知回数 「成功->失敗」 「失敗->成功」 「失敗->新たな失敗」 可能な限り減らす。3個のチェックで3回出すのではな く、1回に3個の情報をまとめる 74
自動化は、ファイルの作成、 上書、削除に集約される。そ の時間をログは重要 自動化のコツ 75
まとめ CIを動かしていても、誰も見なけれ ば、何もしていないのと一緒 そのためには普及と運用の努力が必 要。それは導入した人が一番の適任 運用は自動化すればかなり楽。但し コストがゼロではないことは注意 CIで「良い循環」が作れてはじめて 価値が出る。チームにリズムを作る のは結局、人 76
4/4. 実践 u 77
カテゴリ コマンド バージョン管理 CSV更新、SVN更新、TortoiseSVN更新、git更新、 自動アップロード、自動ダウンロード、バック アップ ファイル操作 現在のコマン バッチ実行、ファイル実行、ファイル監視、フォ ルダ削除、プロセス終了、ファイルコピー ド一覧 IDE操作 Visual Studio起動、 Visual Studioビルド、分散ビル ド、Antビルド、ゲーム実行 レポート機能 IM送信、メール送信、チャット送信、成功時処理、 失敗時処理 78
スマホはVisual Studio2015はiOS, Androidのビルドが可能 Visual Studio2015/ス マホ対応 画像引用 : Visual Studio 79
プログラマがSVNやgitにアッ プすると、指定時間(5分毎)で ビルドチェック フルタイムの 運用 gitリポ ジトリ SVN Commit Git push SVNリ ポジト リ CIツール 80
バージョン管理にあるプロジェク トのHP(Sphinx) やドキュメント (Doxygen) もビルド フルタイムの 運用 画像 引用 : sphinx-user s.jp 画像 引用 : doxygen 81
フルタイムの 運用 エラーがあればチャットに プッシュ通知。なければビル ドで出来た実行ファイルを アップ リソー ス 実行 ファイ ル その他 アップ 82
チャット経由で発言を受けて、 発言に応じたオペレーション を実行するもの ChatOps 画像引用:チームの効率を最大化!nanapi流ChatOpsの取り組み 83
スモークテス ト スモークテストとは「開発で 障害に気付かず、次の工程に 移ると時間が無駄になる。こ れを避けるために、ビルド毎 に、そのソフトが動くことを 確認する。最低限のテストな ので、起動や基本動作を簡易 で見るだけで良い」 これをデバッグショートカッ トとボタン連打で実現 84
フルタイムの 運用 別PCでCIツールがアップされ た実行ファイルをダウンロー ドして実行。10分で正常終了 しなければチャット通知。 ASSERTもチェック 85
指定時間(0:00など) に動きだし、 Gitのリポジトリをclone+Visual Studioリビルドチェック ナイトリーの 運用 0:00 Git clone Visual Studioリビルド 86
最新成功リビジョンでインス トーラーやメディアを自動作 成 ナイトリーの 運用 インストーラー生成 メディア生成 87
その他静的解析への転送など 時間のかかる処理をまとめて やる ナイトリーの 運用 静的解析へキック 88
実行ファイルは何時でもCI ツールからダウンロード可能。 内容は業種による CDの運用 デザイナ 作成 最適化 デバッグ ASSERT リソース リアル タイム Max 一部あ り スルー PC 作成 最適化 デバッグ ASSERT リソース 普通 全部あ り ストッ プ HDD 最適化 デバッグ ASSERT リソース Max ほぼな し スルー DVD 内部チェッカ ナイト リー 作成 外部チェッカ ナイト リー 89
ログの情報も充実。ここから キックも可能で実際、ノンプ ログラマでDVD作成している CDの運用 90
環境設定自体の自動化も。は ワンクリックで必要なソフト、 環境変数、更新が可能 開発環境の自 動化 91
まとめ CIは悪い状態を回避出来るだけでなく、 良い状態を維持出来るようになる。す ると良い循環が生まれる CIしていれば、CDで必要なものは既に ある状態。CIで作った良い循環がチー ムへと拡大していく。 但し、CIを動かしていても、誰も見な ければ、何もしていないのと一緒。良 い循環が作れてはじめて価値が出る CI,CDで出来ることはまだまだ一杯ある。 CI,CDでチームに「良い循環」を作ろ う! 92
おまけ CI,CDツールに僕自身が好きな こともあって、いろんな開発 手法を取り入れながら実装し ている CI,CDに今後重要になりそうな キーワードはDevOps, Immutable Infrastructure, IoT, Machine Learningと思っている。 最後、簡単にご紹介 93
Windowsでのプロビジョニン グはPowerShell,PowerShellDSC など。ChefもPS DevOps/Power Shell 画像引用 : PowerShell Icon 画像引用 : PowerShell DSC実践活用 画像引用 : 第3回 ChefsMeeting.nagoya 94
VSで作った実行ファイルをユー ザーに配布するにはClickOnce。 プロジェクトを開発者に配布す るにはNugetがオススメ。 DevOps/Click Once,Nuget 画像引用 : NuGet 95
パッケージ管理システム。一行で インストール可能。Windows10で はPowerShellGetに DevOps/choco latey,PowerSh ellGet 画像引用 : chocolateynuget 96
仮想環境による開発環境構築。 WindowsでもDocker対応。個 人的にはライセンスがネック Immutable Infrastructure 97
CIのデバイスとしてeXtreme Feedback Device(XFD)、Rasberry PI 2, Stick PCも使えそう IoT 画像引用 : eXtreme Feedback Device 98
コードレビューや仕様チェッ クのような人間しか判定出来 なかったものもCI出来そう Machine Learning 99
ご清聴ありがとうございまし た おわりに 100