CI&CD

1.9K Views

October 09, 24

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

CI & CD Write by 森理麟15/12/13 ゲーム開発環境勉強会@関西#3

2.

Myself HN:森理 麟(@moririring) 職業:プログラマ 著書: Unity5 3Dゲーム開発講座 表彰:Microsoft MVP サイト: http://karaage.click 2

3.

継続的インテグレーション(以 下CI)とは、アプリ作成時の品 質改善や納期短縮の習慣 Continuous Integration Develop Source Test Build 3

4.

継続的デリバリー(以下CD)と は、どのビルドでも一発で、 短時間にリリース出来ること Continuous Delivery Test Release Deploy Build 4

5.

現在の開発でCI、CDの導入は 着実に増えている CIツール、CI サービス Jenkins TravisCI, CircleCI Bamboo, TeamCity Visual Studio Online, AppVeyor 5

6.

僕はCI,CDツールを自作した。 本日はその工程で得られた CI,CD実践するポイントを説明 インハウスCI ツール 6

7.

今日のゴール CI,CDを「知らない」人は、何故 CI,CDが必要か? CI,CDを「普及させたい」人は、 そのポイント CI,CDが「当たり前」な人は、応 用出来そうな知見 聞いてくれた人が何かを持って 帰ってもらえると嬉しい。出来 れば、僕に共有してください! 7

8.

1/4.CI m 8

9.

デイリービル ド作成開始 最初は、森理がCIを導入した きっかけのお話し この時は寧ろ、CIという単語 も知らず、困ったから改善を しただけ 9

10.

メインプログ ラマとの会話 「朝、会社に来てビルドエ ラーだと困りません?」 「困ります!」 「どうにかなりませんか?」 「デイリービルドって単語が ありますよね。あれ、作って みましょうか?」 10

11.

朝一でエラーが出ると困るし、 二次被害も起きやすい。また モチベーションにも影響する ソースを落と してエラーだ と 11

12.

デイリービルドという単語か ら想像できるもの以上の知識 はなし この時のデイ リービルドの 知識 デイリーにする ビルド? 12

13.

次の日から早速デイリービル ドを作成。が、正直何をすれ ば良いのかさっぱり分からず デイリービル ド作成開始 13

14.

当時バージョン管理に使って いたのがTortoiseSVN。検索し て見つけたあるページ  画像引用 : 付録D TortoiseSVN の自動化 TortoiseSVN 14

15.

書いてあるとおりにしたら TortoiseSVNが更新! コマンド コマンドライン 15

16.

当時使っていたIDEもマニュア ルを読んだらスクリプトでビ ルド出来そうだった CodeWarrior 16

17.

こうしてソースを落としてIDE でビルドして、ログを出力で きるスクリプトが完成 VBScript TortoiseSVN更新 ビルド→ログ出力 17

18.

タスクスケジューラーを使っ て、深夜0:00にスクリプトを 叩くようにした タスクスケ ジューラー 0:00 18

19.

ログをHP上で見えるようにし た trac 19

20.

想像していたデイリービルド はこれにて完成! デイリービル ドの完成 20

21.

使ってみたメインプログラマ の一言 メインプログ ラマの一言 ログを見るのが面倒です 21

22.

スクリプトでログファイルを パース。エラーがあれば赤、 なければ緑で表示 NUnitカラー 22

23.

デイリービル ドの結果 こうして、朝一、エラーが分 かるようになった。 これでも立派なCI。最初はこ れぐらい小さく始めるべき。 23

24.

CIのコツ

25.

「コマンドライン+ツール名」 で調べること。大体のツール はそれで自動化の方法が出る 自動化のポイ ント 25

26.

バッチはワンクリックで終わ るように作ること 自動化のポイ ント 作業1 作業1 作業2 作業3 作業2 作業3 26

27.

ワンクリックで作っておけば、 タイマーなどでキックして自 動で運用出来る 自動化のポイ ント 0:00 TortoiseSVN更新 IDEビルド 27

28.

まとめ CIはエラーを見えない状態から見え る状態にする。見える状態は問題が 一番楽な状態で取りかかれる CIは悪い状態を回避出来るだけでな く、良い状態を維持出来るようにな る。すると良い循環が生まれる 時間のかかる処理を自動化する事で 本当に集中したいことに時間を割け る。さらに良い循環が生まれる CIを導入してプロジェクトに良い循 環を作ろう! 28

29.

2/4. CD m 29

30.

デイリービル ド作成開始 CIが導入されて、機能追加を 繰り返していたら必然的にCD 環境も整っていった。次はそ のお話 30

31.

CI導入後、チェック用DVDが 必要になったので、プログラ マが交代で作っていた プロジェクト 中盤の出来事 31

32.

これが結構大変トラブルがあ ると丸一日潰れる事もあった DVD作成 32

33.

CIツールでReleaseビルドも チェックするようにした Releaseチェッ ク 33

34.

さらにDVDを作る工程全てを、 深夜スクリプトにまとめた DVD作成 TortoiseSVN更新 IDEビルド DVD作成バッチ 34

35.

朝、自動的にDVDが完成して いる状態に!これもCD! DVD自動化 35

36.

プロジェクトで使っていくと 問題点も徐々に出てきた 問題点 状況に応じてON、OFFを手軽に 変更したい 機能を増やしたいがScriptでは 無理 動き出した後でも止められるよ うにしたい 36

37.

そこでプロジェクトが終わっ たタイミングで、新たに作り 直すことに 作り直し 37

38.

Windowsプロ グラム WindowsプログラミングでUIが必 要なので.NET Frameworkでの作 成を選択 最初C++/CLIを使ってみるも自分 的には気持ち悪い C#を使ってみると手になじむし GUIが作りやすい。無料なのに、 以前好きだったBorlandC++以上 後にVisual Studio C#とBorlandC++ は両方とも同じ人が作ったと知 る 38

39.

C#の父と ツーショット 39

40.

デイリービル ドフレンズ バッチ処理やVisualStudio起動、 TortoiseSVN更新などのコマン ドをいくつでもタスクに登録 可能。 タスクには名前が付けられて、 複数タスクの登録も可能。 ボタンを押すと上から順番に コマンドを処理して経過をロ グとして出力 40

41.

バッチ実行は内容をパースし てpauseをスルー。地味に便利 バッチpause スルー機能 pauseがあってもスルー 41

42.

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

43.

インターバルではバージョン 管理の変更時のみキックする ように 変更時更新機 能 キック 20:00 33 16:00 31 0:00 30 12:00 31 4:00 30 8:00 31 キック 43

44.

さらに、プログラマ以外の確 認方法をリサーチ プログラマの 自席で確認 DVDでチェッ ク Visual Studioビ ルド • 行くタイミ ングが難し い • 出来まで1日 から数日か かる • エラー対応 が難しい 44

45.

Visual Studioから実行しなくて も、実行ファイルとリソース があれば動くことが分かった 実行ファイル の実行方法 Visual Studio 実行 可能 バー ジョン 管理 実行 ファイ ル 実行 可能 リソー ス 45

46.

CIツールにまとめてアップ ロードする機能とダウンロー ドする機能を入れた アップロード &ダウンロー ド リソー ス 実行 ファイ ル その他 アップ ロード リソー ス 実行 ファイ ル その他 ダウン ロード 46

47.

プログラマ以外にCIツールを 配布。更新、実行などボタン を押すだけで使えた デザイナへ配 布 47

48.

VSなしでチェック可能。しか も自席でトライ&エラーも出 来る!これもCD! デザイナ自立 48

49.

CDのコツ

50.

CIなら常に実行ファイルが作 られるし、エラー番号も分か る。これはCDでも重要。 リアルタイム CIの恩恵 30 成 功 31 成 功 32 成 功 33 成 功 34 失 敗 35 失 敗 50

51.

ワンクリックなら操作説明が 不要。内容に変更があっても 操作が同じ。GUIと相性が良い ワンクリック 51

52.

CI,CDでは、レスポンスよく チェックしたいものと完全に チェックしたいものがある リアルタイム とナイトリー git 通知 pull IM Visual Studio git 通知 リビル ド clone メール Visual Studio リアルタイム ビルド ナイトリー 52

53.

アップロードとダウンロード 機能を入れるとCDが実現。専 用のツールでなくても可能 CI+(アップ ロード+ダウ ンロード)=CD Test Release Deploy Build 53

54.

C#は最高なので、C#を使う I ♡ C# 54

55.

まとめ CIしていれば、CDで必要なものは 既にある。CDのやり方はバッチで も良い 時間のかかるものは1日1回、かか らないものはリアルタイムに更新し て配布 ワンクリックは作り手にも使い手に も大きなメリットがある CIで作った良い循環がプログラマだ けでなくチームへと拡大していく。 チームにCDを取り入れよう! 55

56.

3/4. 普及 u 56

57.

作成よりも普 及 CI,CDを導入して、効果はあっ たが、実は作成よりも普及や 運用させるハードルの方が高 かった 57

58.

CIでエラーは見える状態。ロ グも見やすいように工夫。で も、見てもらえるかは別の話 見やすければ 見るか? 58

59.

メールなどでログ設置の連絡 をしてもスルーする人はいる ログの連絡 59

60.

エラーを出す人に限ってメー ルを見てなかったり。修正に 時間がかかる事も多かった エラーあるあ る 60

61.

エラーの場合はログを抽出し て手動でメールを送ってくれ る人が出てきた。 ピックアップ メール 61

62.

エラーなら修正されるリズム が出来てきたので、エラー メールも自動化 修正リズムの 確立 エラー時 TortoiseSVN更新 IDEビルド DVD作成バッチ 62

63.

エラーはかなり減ったので、次に 警告数も出すようにした。フルビ ルドなので数も正確 ログに警告 63

64.

しかしこちらは更になかなか直ら なかった。メインプログラマと警 告ゼロキャンペーンを発動 ワーニングゼ ロキャンペー ン 64

65.

プロジェクト全体で10000個以 上あった警告が0個になった日 は拍手が起こった ゼロデーの朝 礼 65

66.

運用

67.

パソコンの確 保 最初は自分のパソコンから始めた。 タイマーで深夜なら(殆ど)負担も ない チームにとって価値が認められると、 低スペックでも専用機を用意してく れるケースも DVD作成機や共有機など必須の専用 パソコンで併用して運用するのも手 長年やるので長期計画でPCは確保。 予算確保時やPCの買い替え時期に 確保して全部使っている 67

68.

CIは基本的に毎日自動的に動 作する。ではCIはスクリプト さえ作れば、何もしなくて良 いか? CIの運用 68

69.

CIはサーバー と同じ 自動化されている分、手間は 少ないが、CIは動き続けてい るのが絶対。放置で運用は難 しい 69

70.

運用の問題点 バージョン管理の衝突やbatの pause WindowsのUpdate、パスワード の定期変更 連絡漏れによる電源切断や夜間 停電 ツールやSDKのバージョンアッ プ よく分からないけれど起こるエ ラー 70

71.

まとめ

72.

作った人以上に内容を分かっ ている人はいない。使っても らう努力はとても大事 普及のコツ 72

73.

チームに修正するリズムを作 るのがポイント。その際、人 のフォローはかなり重要 普及のコツ 73

74.

自動メールはスルーされやす い。無駄に投げるとすぐノイ ズになる 自動メールの コツ 内容 ポイント 件名 本文を見なくても大事なことは把握出来るように (タスク名や成功か失敗か) 詳細なエラー情報もしくはログページへのリンク 本文 通知条件 通知回数 「成功->失敗」 「失敗->成功」 「失敗->新たな失敗」 可能な限り減らす。3個のチェックで3回出すのではな く、1回に3個の情報をまとめる 74

75.

自動化は、ファイルの作成、 上書、削除に集約される。そ の時間をログは重要 自動化のコツ 75

76.

まとめ CIを動かしていても、誰も見なけれ ば、何もしていないのと一緒 そのためには普及と運用の努力が必 要。それは導入した人が一番の適任 運用は自動化すればかなり楽。但し コストがゼロではないことは注意 CIで「良い循環」が作れてはじめて 価値が出る。チームにリズムを作る のは結局、人 76

77.

4/4. 実践 u 77

78.

カテゴリ コマンド バージョン管理 CSV更新、SVN更新、TortoiseSVN更新、git更新、 自動アップロード、自動ダウンロード、バック アップ ファイル操作 現在のコマン バッチ実行、ファイル実行、ファイル監視、フォ ルダ削除、プロセス終了、ファイルコピー ド一覧 IDE操作 Visual Studio起動、 Visual Studioビルド、分散ビル ド、Antビルド、ゲーム実行 レポート機能 IM送信、メール送信、チャット送信、成功時処理、 失敗時処理 78

79.

スマホはVisual Studio2015はiOS, Androidのビルドが可能 Visual Studio2015/ス マホ対応  画像引用 : Visual Studio 79

80.

プログラマがSVNやgitにアッ プすると、指定時間(5分毎)で ビルドチェック フルタイムの 運用 gitリポ ジトリ SVN Commit Git push SVNリ ポジト リ CIツール 80

81.

バージョン管理にあるプロジェク トのHP(Sphinx) やドキュメント (Doxygen) もビルド フルタイムの 運用  画像 引用 : sphinx-user s.jp 画像 引用 : doxygen 81

82.

フルタイムの 運用 エラーがあればチャットに プッシュ通知。なければビル ドで出来た実行ファイルを アップ リソー ス 実行 ファイ ル その他 アップ 82

83.

チャット経由で発言を受けて、 発言に応じたオペレーション を実行するもの ChatOps  画像引用:チームの効率を最大化!nanapi流ChatOpsの取り組み 83

84.

スモークテス ト スモークテストとは「開発で 障害に気付かず、次の工程に 移ると時間が無駄になる。こ れを避けるために、ビルド毎 に、そのソフトが動くことを 確認する。最低限のテストな ので、起動や基本動作を簡易 で見るだけで良い」 これをデバッグショートカッ トとボタン連打で実現 84

85.

フルタイムの 運用 別PCでCIツールがアップされ た実行ファイルをダウンロー ドして実行。10分で正常終了 しなければチャット通知。 ASSERTもチェック 85

86.

指定時間(0:00など) に動きだし、 Gitのリポジトリをclone+Visual Studioリビルドチェック ナイトリーの 運用 0:00 Git clone Visual Studioリビルド 86

87.

最新成功リビジョンでインス トーラーやメディアを自動作 成 ナイトリーの 運用 インストーラー生成 メディア生成 87

88.

その他静的解析への転送など 時間のかかる処理をまとめて やる ナイトリーの 運用 静的解析へキック 88

89.

実行ファイルは何時でもCI ツールからダウンロード可能。 内容は業種による CDの運用 デザイナ 作成 最適化 デバッグ ASSERT リソース リアル タイム Max 一部あ り スルー PC 作成 最適化 デバッグ ASSERT リソース 普通 全部あ り ストッ プ HDD 最適化 デバッグ ASSERT リソース Max ほぼな し スルー DVD 内部チェッカ ナイト リー 作成 外部チェッカ ナイト リー 89

90.

ログの情報も充実。ここから キックも可能で実際、ノンプ ログラマでDVD作成している CDの運用 90

91.

環境設定自体の自動化も。は ワンクリックで必要なソフト、 環境変数、更新が可能 開発環境の自 動化 91

92.

まとめ  CIは悪い状態を回避出来るだけでなく、 良い状態を維持出来るようになる。す ると良い循環が生まれる  CIしていれば、CDで必要なものは既に ある状態。CIで作った良い循環がチー ムへと拡大していく。  但し、CIを動かしていても、誰も見な ければ、何もしていないのと一緒。良 い循環が作れてはじめて価値が出る  CI,CDで出来ることはまだまだ一杯ある。 CI,CDでチームに「良い循環」を作ろ う! 92

93.

おまけ CI,CDツールに僕自身が好きな こともあって、いろんな開発 手法を取り入れながら実装し ている CI,CDに今後重要になりそうな キーワードはDevOps, Immutable Infrastructure, IoT, Machine Learningと思っている。 最後、簡単にご紹介 93

94.

Windowsでのプロビジョニン グはPowerShell,PowerShellDSC など。ChefもPS DevOps/Power Shell  画像引用 : PowerShell Icon 画像引用 : PowerShell DSC実践活用 画像引用 : 第3回 ChefsMeeting.nagoya 94

95.

VSで作った実行ファイルをユー ザーに配布するにはClickOnce。 プロジェクトを開発者に配布す るにはNugetがオススメ。 DevOps/Click Once,Nuget  画像引用 : NuGet 95

96.

パッケージ管理システム。一行で インストール可能。Windows10で はPowerShellGetに DevOps/choco latey,PowerSh ellGet  画像引用 : chocolateynuget 96

97.

仮想環境による開発環境構築。 WindowsでもDocker対応。個 人的にはライセンスがネック Immutable Infrastructure 97

98.

CIのデバイスとしてeXtreme Feedback Device(XFD)、Rasberry PI 2, Stick PCも使えそう IoT  画像引用 : eXtreme Feedback Device 98

99.

コードレビューや仕様チェッ クのような人間しか判定出来 なかったものもCI出来そう Machine Learning 99

100.

ご清聴ありがとうございまし た おわりに 100