Microsoft DevOps ハッカソンに参加したよ

f:id:couger:20150906161306j:plain

Microsoftさんが主催するDevOpsハッカソンに参加したので、そのレポート。

DevOpsハッカソンとは?

イベントの内容からコピペ。

DevOpsのマインドセットを2日間のトレーニングで学ぶイベントです。
伝統的なアプリケーションライフサイクルマネジメント(ALM)から脱却して、
DevOpsの人、プロセス、そしてツールについて学んで、
顧客により早くビジネス価値を届けられるようになりましょう!
DevOpsハッカソンに参加すると、あなたは開発者、インフラ技術者の方とチームを組んで
Infrastructure as Codeに関する実際の環境でDevOpsのプラクティスを適用することができます。

大まかな流れ

  • DevOpsについての説明
  • イデア出し&チーム決め
    • ホワイトボードに名前と自分のやりたいことを書いてみる
    • みんなに紹介
    • 各自投票
  • ハッカソンについての説明
    • 大まかな進め方、チームの評価ポイントなど
  • ハック!! (翌日15:30まで)
    • 発表の準備を含む
    • 初日の残業は18:00まで :P
  • 発表&表彰
    • 1チーム5分でプレゼン

私たちのチームができたこと

Visual Studio OnlineとAzureを使ったJavaアプリのビルド、デプロイと、負荷テスト。
ビルドと、デプロイはVSOのビルドを使って自動化。負荷テストは手動で実行。

Javaアプリのコード、デプロイのスクリプト(Dockerfileなど)は、MS 寺田さんがデモで作成されたものを利用。

発表スライド

ビルド

GitHubにあるコードをクローン&ビルド&warファイルにパッケージング。

デプロイ

ビルドで生成されたwarファイルを使って、Dockerイメージを作成、DockerHubにpush。
評価用サーバにイメージをpullして、コンテナを起動。
イメージのビルドやデプロイ用のスクリプトGitHubに格納。

負荷テスト

Visual Studioを使って負荷テスト。 PowerBIを使ってグラフ化。

お借りしたコード

お借りした知恵

山ほど。MSのみなさん、どうもありがとうございました。
参加者だったのにたくさんのヘルプに応じてくれた竹林さん、ありがとう!!!

使ったお金

Azureポータルで見ることができるので、さらしてみる。 Visual Studio Onlineが一番太いようだ。
※ VSOは5人まで無料。今回は6人チームだったので、1人分のコストが発生したとのこと。

f:id:couger:20150907072144p:plain

ふりかえり

良かった

  • Visual Studio Onlineを使って継続的デプロイを体験できた
  • 会場が快適!! お弁当おいしい、ネットもスイスイ、飲み物たっぷり
  • メンバーそれぞれがビルド、デプロイ、負荷に分かれて、いい感じで進めてた
    • バランスがとても良かったんだと思う
  • 困った時にいろんな人の手を借りた
    • 牛尾さん、寺田さん、MSのみなさま
    • 竹林さん、原田さん
  • 全体の絵を描いて、みんなのコミュニケーションを助けた(と思いたい)

困った

  • VSOを使えるようになるのに時間がかかった
    • 事前の素振りを間違えた感がある
      • dockerじゃなくてサンプルを素振りしておけばかなり楽になったんじゃないか?
  • テストがない!!
    • 時間がなかったからとか言ってたら、誰かにしばかれそう
  • VSOAgent, 評価用サーバは手動で作成
    • 何回もやるとすると骨折れるし、やっぱ自動化したいところ
  • 他のチームとほとんど話せなかった
    • 今考えるともったいない気がする
  • 最後のプレゼン、各チームのデモをスクリーンで見たかった
    • 準備時間考えるとちょっと難しかったと思うけど
  • 写真が少なすぎる!!
    • ブログ書くとき致命的

次やるとき

  • 何を素振りするか注意しよう
    • 提供されるサンプルがある場合はまずそこから始めてみよう
  • Hello Worldアプリからスタートして、少しずつ成長させよう
  • 最初に絵を描いてみよう
    • 描けなければ分かってないことが分かるし、上手くいけばみんなの理解を助けることができる
  • 他のチームにも遊びに行こう
    • 邪魔しない程度に
  • 1時間に1回休憩入れて、写真撮ろう
    • 頭冷やせるかもしれないし

自分たちでやるとしたら

Azureの費用について、Facebookでコメントをもらったので更新。ありがとうございます!!!

もし、小さな(1チーム=5人未満)DevOpsハッカソンをやるとしたら。

  • 会議室: 10時間 * 2
  • Wifi: 自前または、付属の会議室を探す
  • Azure利用料: 1,000円程度
    • VSOは5人まで無料、6人目からは費用が必要
    • 仮想マシンリソースは使わない時は落とす
      落とさない=24時間運用の場合は3倍くらいになるはず

ご飯と飲み物は、自分の好みで持ち込み。(俺の場合はコンビニ弁当とパンで十分)

会議室は スペースマーケット | 貸し会議室から球場まで簡単予約 とか見ると、Wifi付きで400円/時間くらいから借りられるみたい。

項目 費用
会議室+Wifi 8,000円 400円/時間 * 10時間 * 2日
Azure使用料 1,000円 ツワモノがいる場合でも3,000円くらい??

9,000円を5人で割って1人1,600円。
ツワモノが集まったとして12,000円だから、1人2,400円。(ツワモノを甘くみすぎ??)
1,600円+食費・交通費だったら、飲み会1回分より安いので、参加しやすいかも。

問題は、MSのエバンジェリストと、VSO、Azureの達人をどうやって確保するか……だよねぇ。
DevOpsハッカソンに参加した人を巻き込んでしまうのがいいかもしれない。


以下は、私から見た経緯。長いし、偏ってるのでご注意をば。

やったこと(1日目)

DevOpsの説明&チーム決め

DevOpsエバンジェリストのDavidさんからDevOpsの説明。そもそもから始まって、VSOを使った継続的インテグレーション、継続的デプロイなどが紹介されてた。
CIの部分は牛尾さんが説明。参加者を罠にはめて、TDD&ペアプロの実演に引きずり込むなど、牛尾さんらしい進め方。

f:id:couger:20150905095144j:plain

次は、ハッカソンのアイデア出し。 チームでホワイトボードに名前とハッカソンでやってみたいことを書きだして、共有。
このままチームでやりたいこと選んで、ハッカソンスタートなのかなぁと思ったら、 全チームのホワイトボードを壁にはって、みんなにも共有。 その後、自分の名前を書いた付箋を、やりたいテーマに貼り付けて、テーマごとにチームを組み替えた。
なるほど、やりたいテーマで集まった方が面白いよなぁ。

VSO使った継続的インテグレーション・継続的デリバリーをテーマにしてみたものの、他のテーマの方が面白そうでうろうろしてたら、その間に自分が出したテーマに5人集まっちゃって、身動きが取れなくなってしまった。(と、この時点では思ってたんだけど、後から考えてこれはとてもラッキーだったと思う)

後、ぼっちチームができそうになって、かっこえーとか思ってた。

チームができたら、ハッカソンの進め方や評価ポイントなどを説明。 ざっくり計画立てて、スタート!!

ハックハック!!

正確には四苦八苦が正しい。

最初はオートスケールできたらいいねとか、インフラのテストやりたいよね、WebアプリはRailsにしたいよね、という話をしていて、1日目終わるまでに、アプリがデプロイできたらいいんじゃない? なんて気軽に思ってた。

楽観的に考えてることがうまくいけば世の中楽なんだけど、そうはいかず。
VSOの環境設定ではまってどたばたしてたら、夕方が来てたような気がする。(すでに記憶が薄い)
「進捗どうですか?」と聞かれたら、「まったく進捗なしです」と答えなきゃいけない事態。ヤバい。

なんでこう、自分がやるときは楽観的に考えてしまうんだろうね...orz

他の人もいろいろとはまってた模様。夕方近くなっての進捗は、確かこんな感じだったと思う。

  • ビルド: できてない
  • デプロイ: できてない
  • 負荷テスト: できてる!!!

よもや負荷テストが一番最初にできるとは...。 このままいくとやばそうなので、ビルドとデプロイは事前に提供されてたサンプル PartsUnlimitedMRP を使うことに。

18:00までの残業を終えて、1日目終了。
不安だったので、帰ってからサンプルを素振り。2時間程度で継続的インテグレーションの部分ができた。
サンプルの説明が丁寧だったのに加え、昼にこけた経験が生きた結果と思われる。
デプロイもできるようにしておこうかと思ったんだけど、設定ミスのせいでつまづいて気力大幅にダウン&KO。

2日目

朝のワーク

2日目のスタートは、牛尾さんのワークから。 背伸びした後、おたけび。おたけび???

「イイイイヤァァァァーッ!」

その後、「作業の見える化しましょう(だったと思う)」ということで、残タスクを見積もり時間も合わせて書き出した後、課題を共有。 タスクを見ながら、今日どこまで行けそうか相談するという流れ。

いつも自分が会社の人に説明していることのはずなのに、言われてあーそうだよねと気づいたりするところが情けなかったり。

ハックハック!!

いろいろあって、昼頃の状況。

  • ビルド: できた!!
  • デプロイ: できない
  • 負荷テスト: できてるので、さらに楽しいことを!!

デプロイさえできたら、繋がるんだけどなぁ。

DockerホストとVSOエージェントの連携が上手くいかなかったりなんだりで、なかなか進まない。
それでも、MS寺田さんが作っていたDockerfileを使って、Glassfishのイメージを作成、評価サーバにデプロイ、実行するところまで到達。

でも、ビルドしたアプリをGlassfishで動かそうとすると失敗する。

あーだ、こーだと悩んでいるうちに、残り2時間。
この時点で、集中力が切れてしまった。けっこう、あきらめ早い。
1人だったらここで終了なんだけど、そこはチーム。まだまだ終わらない。

MS寺田さんのアドバイスで、動かすアプリをサンプルのものから、寺田さんの作ったものに切り替え。 ビルドとデプロイを修正して.... できた!!!

プレゼンの準備

手が空いてた人がプレゼンの資料を作ってくれてたので、自分はほとんど何もせず。
手慣れた感じで、さくさくっと作ってて、とても羨ましく思うなど。

このへんから、笑いも出たり和やかな雰囲気に。
終わってなかったら、多分眉間にシワが寄ってたと思うし、今も寄ってたんじゃないかと思われる。
みんなの粘りに感謝。

プレゼン&表彰

f:id:couger:20150906155608j:plain

各チーム、5分間のプレゼン。 メモがないので、覚えていることを書き出してみる。

  • 優勝は、Mesos使ってたチーム
  • 他のチームも四苦八苦して、軌道修正してた
  • VSOでタスク管理してたチームがいた
  • 小さく積み上げながら上手く作ってたチームがいた
  • プレゼン資料まで作ってたのはうちくらい

後、うちのチームもいいところまでいってたみたい。 Team4のみなさん、MSのみなさん、参加者のみなさん、お疲れ様でしたー!!!