Skip to content

Instantly share code, notes, and snippets.

@ohtake
Last active December 31, 2015 22:59
Show Gist options
  • Save ohtake/8057016 to your computer and use it in GitHub Desktop.
Save ohtake/8057016 to your computer and use it in GitHub Desktop.
第8回Jenkins勉強会

第8回Jenkins勉強会

TODO スライドなどへのリンク追加

Jenkinsプロジェクト2013年のまとめ

  • CloudBees 川口さん

Jenkins プロジェクトはコミュニティに支えられている。

もとは一人で始めたプロジェクトだが今年だけで1090人によるコミットがあり一人当たり20コミットであった。コミット数としてはLinuxカーネルの4割強。

Google や Microsoft もプラグインを書いてくれるようになった。Sun に入る前は MS 信者だったので MSDN に Jenkins が載ったのはうれしい。

全世界で18万台のスレーブがあり、Yahoo! のデータセンター3つ分。観測されている範囲で250万ジョブある。

WAR に組み込んである Servlet コンテナを Winstone から Jetty に変えた。Winstone の開発が止まってしまったため。Jetty にしたことで WebSocket や SPDY が使えるようになっていくはずだ。

Credentials Plugin を作った。パスワードなどの認証情報を各プラグインに持たせていたが、このプラグインを用いることで認証情報を一元化した。

Git Plugin が 2.0 でメジャーリライトした。機能が増えすぎたので、拡張ポイントで Git の細かな挙動をいじれるようにして画面をすっきりさせた。

Folder Plugin によってジョブを階層構造を持たせて管理できる。

文芸的ビルドのデモ。文芸的という名前はクヌース先生の文芸的プログラミングから。README.md にビルド手順を書いておく。

Build
=====

How to build this project: mvn install

ジョブの種類で文芸的を選ぶ。レポジトリのアドレスだけを指定してブランチは指定しない。ブランチを作るとそのブランチに対応したジョブが作られる。

X1K プロジェクト。1000 executor をサポートできるようにしたい。Executor にSSHやスレッドを無駄に消費していたので、見直すことで executor の数の8倍のスレッドが必要だったのを2倍になるようにした。スレーブに jar をコピーするときに、全コピーだったのをキャッシュできるようにした。SSHのフローコントロールも見直した。レイテンシが大きいような環境でも帯域が有効に使えるようになった。

Jenkins の結合テスト。Ruby + Selenium + capybara + cucumber/rspec によるテスト。Jenkins から呼び出す外部サービスは Docker で。

Jenkins Operations Center by CloudBees. 複数の Jenkins マスターを束ねるマスターのようなもの。スレーブ共有やSSOなど。

DEV@cloud で OSX でビルドをできるようにした。Apple のハードの上で Linux, QEMU, OSX のスタックを積んで仮想化した。ZFS のコピーオンライトをすることで、複数のジョブが同じソースコードレポジトリを使うとき、前もってチェックアウトしてあったワーキングツリーをクローンすることで高速化。

Jenkins はじめました Yahoo! Japan の CI/CD

マーケティングソリューションのインフラ開発をしている部署に所属している。以前は Jenkins 周りで今は仮想化関係の業務をしている。

Yahoo! プロモーション広告とは。Web 上の広告で、検索連動、興味連動、行動連動だったりする。クリックによる課金。夏の甲子園の時期のお昼休みには負荷が高かった。

運用担当2名とJenkinsでプロモーション広告の配信をしている。9割くらいのコンポーネントがCI/CDされているためこの少人数で足りている。

社内の GHE にプッシュするとフックで Jenkins がビルドをしてステージング環境や本番環境に展開する。Jenkins master は3台でそれぞれにスレーブが10台。ジョブは300個。所要時間は30秒から1時間くらい。デプロイツールは Fabric, Capistrano, Rundeck を使い分けている。

この現状に至るまでの道のりとしては、数名による有志が始めた。独自のビルド実行スクリプトにより統一されたデプロイメントパイプラインを構築している。ボトムアップで始めたが、最終的には管理職の理解と強力なサポートにより現在の状況が実現できた。

トラブル事例や課題としては、Jenkins の SCM ポーリングで GHE に負荷が集中していた。そのため Web hook を有効活用した。予算のない部署はスレーブ用のサーバの調達が困難だったりしたため、jclouds プラグインで仮想マシンをスレーブとして利用できるようにした。OpenStack ベースの社内 PaaS があり、ビルド終了でVMを削除することでクラウドリソースも節約している。ブルーグリーンデプロイメントやイミュータブルインフラストラクチャにこれから挑戦していきたい。

CI/CDに必要なことは2つある。ボトムアップで進めるためにエバンジェリストが重要で、エバンジェリストによる改革を行っていくこと。そしてルールや議論はほどほどにして、まずは挑戦すること。

  • Q: WebHook とポーリングにそれぞれメリットがあるとのことだが、その目安は。

  • A: コミットの頻度などから考えるべきだったが、リソースが足りなかったのでビルド数が多いものから WebHook に切り替えていった。

  • 川口さん: 持論ではポーリングのほうが優位になることはあり得ない。

  • A: プッシュが多すぎるとビルドが多すぎてしまうため。

  • 川口さん: Quite period を使って調節すべき。

  • Q: 何年前から始めたのか

  • A: 入社時点ではすでに始まっていたので不明。3-4年前からは始まっていたと聞いている。

  • Q: テストが十分でないところがあるとのことだったが、どこが十分でないか。

  • A: テストを書く習慣がないこともあるが、難易度の高いテストはやはり画面周り。

  • Q: OpenStack を使うようになった理由と OpenStack のメリットデメリット

  • A: 社内に以前からプライベートクラウドがあったが古くなっていた。OSSを有効活用しようという気運があり、OpenStackを選んだ。OpenStack のメリットとしては、拡張がしやすいため社内のセキュリティルールを実装できることがあげられる。

Jenkins Enterprise by CloudBees の紹介

シフトでは第三者検証をビジネスとしている。CIに関するなんでも屋さんで、Java, PHP, Ruby などを使っている。Jenkins の導入やセミナーも行っている。

Jenkins Enterprise by CloudBees は Jenkins の有償版で、サポートが受けられ、Enterprise 独自のプラグインが使える。"by CloudBees" のため川口さんをはじめ強力なサポート体制がある。OSS 版 Jenkins の8割が CloudBees の従業員によって書かれている。

独自プラグインには稼働率向上、大規模開発、セキュリティ、リソース最適化の軸がある。High availability, Folder, Templates, Role-based access control (RBAC), Secure copy, Custom update center, Even scheduler, VMware vCenter auto-scaling, Skip next build プラグイン。

Folder プラグインではフォルダごとジョブをまとめてコピーしたり、フォルダ内に対して共通の環境変数を設定できたりする。Templates プラグインは builder template と job template があり、それぞれビルドステップとジョブのテンプレートとなる。RBAC では、ロールに権限を割り当て、グループにはユーザとグループを入れられる。ジョブごとに管理権限の委譲ができたりする。

日本ではあまり普及していないが、便利機能がそろっているので声をかけてほしい。

ライトニングトーク

ビールを飲みながらのライトニングトーク。

Jenkins のフィギュア8個をじゃんけん大会でプレゼント。

おひとりさまから1年後。

前回の勉強会で初めて発表をさせてもらった。 http://www.slideshare.net/akiko_pusu/ss-14797776

その時に一緒に発表をしていた今井さんの影響で IntelliJ に恋に落ち、IntelliJ を使って Jenkins プラグインも作った。

前回から1年たったが会社も部署も変わってはいない。変わったこととしては、つぶやく内容が IntelliJ ばかりになったことと、執事の立ち位置が変わった。

会社的な都合でジョブ管理ツールが導入され、執事の立ち位置がなくなりそうになった。定期実行についてはそのジョブ管理ツールにとってかわられた。それでもかまわない。なぜなら組織が自動化をして喜ぶフェーズから、自動化を意識する文化が根付いていったため、どこで定期実行してもよいから。執事に期待することは自動化のスタートアップを支援してもらい、ジョブの内容が固まったらジョブ管理ツールに移行する。

自身の情シスとしては執事はサーバのセットアップやテストにフォーカスしていった。Jenkins はツールではなく、執事キャラとして浸透していて、社内ブログやWikiを執事が書いている。

Jenkins with Docker

Docker は LXC, aufs などをベースとした軽量仮想化。

Jenkins マスターが Docker をインストールしたスレーブにジョブを依頼し、ジョブ内ではコンテナを作りテストやビルドを行ってコンテナを捨てる。

複雑な例では複数バージョンの node に対してテストを行う。docker コマンドに -d オプションをつけることでバックグラウンドで実行される。docker wait で待ち合わせをしてすべてのバージョンで通っているかを確認する。

Docker を使うことでクリーンな環境が一瞬で作れる。後でスライドや Vagrant ファイルを公開する。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment