torutkのブログ

ソフトウェア・エンジニアのブログ

Jenkinsユーザーカンファレンス東京2015

参加メモの断片です。
1月11日(日)にJenkinsユーザーカンファレンス東京2015が開催されました。
http://build-shokunin.org/juc2015/

3連休中日に、300〜400人ほどが参加した模様です。

参加申し込み時のアンケート集計結果
http://www.slideshare.net/ikikko/jenkins2015

基調講演

  • インストール数は前年比44%増
  • プラグイン1000個
  • UI改善中*1
    • 最近のバージョンを入れると見た目が変わっているのに気付くでしょう
    • レスポンシブデザイン、フラットデザイン、など
  • Docker公式イメージに
  • マスタースレーブ通信のNIO化
  • ワークフロー(プラグイン)開発
    • ビルドだけ自動化、からさまざまな作業の自動化(継続的デリバリー)
    • 多段階の継続的デプロイメントパイプライン
    • たくさんのプロジェクトが並ぶ現状を改善したい
    • たくさんのJob、似たような処理、GUIではなくテキストで設定
    • 途中でエラー中断してもコンテキストを保存して再開

Ask the Speaker

BMWの方が怪我で来日できなくなったため、急遽川口さんへのQ&A大会に。

Windows周りの問題について活発な質問が挙がっていました。

  • Windowsサービスで動くとデスクトップで動くときと違いが多々あるので、Windowsでスレーブ実行するときはオートログインしてスタートアップからJenkins起動する回避策が割と有効
  • Windowsの文字化け問題は、欧米の開発者の多くが国際化を正しく扱えてないことに起因するので*2、こつこつとレポートを挙げていく必要がある。

Jenkinsの社内展開のよいプラクティスについて

  • 手順を標準化、各プロダクトチームで利用するときは、フリープロジェクトではなく用意された雛形(?)を利用

スレーブが多いときに、プロジェクトで逐一スレーブを指定しなくてもよい、例えばグルーピングする方法は?

  • ラベルをつけるとよいです。ラベルの条件式で使うスレーブを制約することもできます。

プラグイン開発の入門は?

https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial

  • 次はエクステンションポイント一覧(多過ぎるけど)
  • 海外ではプラグイン開発のブートキャンプがある
  • Jenkinsのおかしな挙動を調べたいときは、jenkinsマスターをリモートデバッグオプションを指定して立ち上げ、デバッガーをアタッチするといいかも

日本のJenkinsコミュニティはメーリングリストがあるのでぜひ使ってね
» メーリングリスト 日本Jenkinsユーザ会

クックパッドによるJenkinsの活用

  • Ruby 2.0+Ruby on Rails 4.1、Amazon Web Service上で稼動
    • テストはrspec、capybara-webkit(エンドツーエンドの自動テスト)
  • マスターとスレーブはAWS上で稼動、AndroidiOSの作業はオンプレミスで稼動
  • CIで守るべき価値
    • 意図しない変更の予防
    • 再現可能で自動化(自働化
    • リソースや情報を集約
  • 取り組みの例
    • 最後に成功したビルドを1日の最後に実行している
    • システム時刻を月初に設定してテスト実行(時刻の境界条件
    • 失敗したテストを再実行
    • 失敗の通知だけでは誰も見ないので、どこが、なぜ、(誰が)を分かるようにする

Jenkins導入する本当の理由を考えてみた

  • JenkinsのJobに記述する手順(コマンド)は簡潔に(最小限に)
  • Jenkinsを広めるには
    • 分からない人にはハードルが高い
    • 作って終わり(Jenkinsのプロジェクトのことだったか?)では広まらない
    • 手順書を書く
      • Jenkinsを操作(ビルド実行)するための手順書
      • READMEを書く。Jenkinsプロジェクトの説明に、長くなる場合はWikiに書いてプロジェクト説明からURLリンク
      • 自分が抜けても困らないように(自分がSingle Point of Faiureにならない)
  • grep
    • ステージごとにJenkinsプロジェクトの色分けする、など
  • Jenkinsが死んでもオペレーションできるようにしておく
  • 啓蒙活動
    • 使ってもらう
    • 学習してもらう
    • ドキュメントだけでは使ってもらえない、隣に寄り添って一緒に使ってみる

LT大会

  • Gitlab使っている、マージリクエスト、マージ前にビルド、静的解析、テストをする
  • 管理画面をJenkins、バッチ処理(集計、解析、外部API)、負荷テスト

最後に

Jenkinsの運用事例を聞くことができてよい機会でした。開発プロジェクトや組織の中で、開発環境(特に構成管理)を良くしようというモチベーションを持っている人は割と少数(たいていは孤独かも)なので、社外で敷居の低いコミュニティがあることは、とても助かります。

これだけの規模のコミュニティイベントを無償で開催している運営の方々に感謝します。

*1:1.568は旧UI、1.578は改善UIでした

*2:UTF-8対応したらOKだというのが多くの認識