will and way

ただの自分用メモを人に伝える形式で書くことでわかりやすくまとめてるはずのブログ

Jenkinsカンファレンス - CookpadのJenkins活用事例

結論から言うと...CIに対する文化や規律が重要.

実際にはJenkinsを導入するだけでなく、CIに対する意識向上が重要

  • バグがでたらすぐ直す。バグがある間のコミットはもはや無意味。
  • 失敗の通知には5W1Hを含むと当事者意識が湧く。
  • ビルドがこわれたおじさんでいい。呼びかけることが重要。それが文化になる。文化は組織の根底に流れるもの。ローマは一日にして成らず。

最終目的はCIの先にあるユーザーにいち早く触ってもらうことである。

  • クオリティを安定させ堅牢性をあげ、デリバリーの属人化をなくし、最終的に誰でもデプロイできる状態に持っていくためのツール.
  • リリースサイクルを短くしよう。

クックパッドにおけるJenkinsの活用

speaker : 高井さん

サービス概要

  • 5000万人
  • 180万レシピ

主な開発言語

ruby 2.0 + rails4.1 + amazon web service
もちろんモバイルはnative

Jenkinsの使い方

ふつうにつかってる

ふつうとは...

やるべきことをやっているという意味。今回紹介するのはその、"やるべきこと"

Jenkinsではなくおむきんすというのをつかってる.(どうでもいい)

  • AWS上にmaster
  • スレーブが6node 夜間は2node

おもな構成

  • puppet / Itamae (ここはよく聞いてなかった.)
  • ラベルでnodeを振り分けている。rubyの環境などによって依存関係が違ったりするので、環境に応じたnodeにジョブが振られる.
  • クラウドとオンプレミス環境

なぜ, CIしているか

CIの価値

  1. 意図しない変更を予防できる
  2. 再現可能で自動化されている
  3. リソースや情報を集約できる この3つが重要.
1. 意図しない変更を予防できる
  • ターンアラウンドを短くする
    • マルチプロセス化
    • spot instanceを利用 オークション形式で余ってるインスタンスを利用. 突然使えなくなる可能性あり
    • プロセス停止からの自動復帰
    • 失敗したテストの自動実行
    • テスト実行順序の最適化
    • 長時間かかるテストの投機的実行 -> 空いてるインスタンスを見つけて実行しちゃう。
    • オープンソース
  • 分散化
    • remote_spec
    • rrrspec triple rspec.
  • すぐに失敗を伝える
    • 失敗するとHipchat 5w1hがわかる
    • collective owntership だれでも治せる. ビルドがこけたおじさんになろう.
    • 偽陽性を避ける
      • 環境・時間・性能に依存するもの.time outとか.
      • エラーを気にしなくなる, 本物のエラーを見逃す, 割れた窓理論
    • [Tips] 月初や日跨ぎの時間にシステム時間を設定してビルドを実行してみる.境界で失敗してる可能性.

2. 再現可能で自動化されている

  • CIは基本的にデリバリーをゴールとしている
  • CIはいつでもデリバリー可能にしておく。それが継続的デリバリー.
  • Jenkinsでやってること

3. リソースや情報を集約できる

  • デプロイスクリプト
  • カバレッチ
  • モニタリング
  • CIを見ればプロジェクトの状況がわかる.(デプロイ履歴, Assetの最終更新, 誰がデプロイした?, テストのカバレッチ状況.8)
  • growthforecastでテストの似たリング

後で調べる単語

  • ci-slave-docker
  • micro services 小さいエンドポイントでサービスを提供する
  • growthforecast