ポストJenkins時代のCI戦略

41
ポストJenkins時代の 自動化戦略 Posaune @ Guildworks 2015/07/11(土) CI勉強会 #vshtc 1

Transcript of ポストJenkins時代のCI戦略

ポストJenkins時代の自動化戦略

Posaune @ Guildworks

2015/07/11(土) CI勉強会 #vshtc 1

自己紹介• 前川博志 aka @Posaune

• ギルドワークス株式会社で働いています

• 勝手にALMエンジニアを名乗ってます• Microsoft MVP for Visual Studio ALM

2015/07/11(土) CI勉強会 #vshtc 2

ギルドワークス• 現在7名の小さな会社• 設立一年ちょっとのベンチャー企業• ソフトウェアの超上流での見立てから開発、果ては現場改善までやってます

• モットーは「正しいものを正しくつくる!」

2015/07/11(土) CI勉強会 #vshtc 3

諸々お知らせ!from ギルドワークス

2015/07/11(土) CI勉強会 #vshtc 4

Blog やってます!http://blog.guildworks.jp/

2015/07/11(土) CI勉強会 #vshtc 5

カンファレンス、やります!

2015/07/11(土) CI勉強会 #vshtc 6

2015/07/11(土) CI勉強会 #vshtc 7

お悩み・相談募集中• 現場が同しようもないから何とかしたい・・・• アイデアを形にできない・・・• お気軽にご相談を! ⇒ http://guildworks.jp/about/work/

2015/07/11(土) CI勉強会 #vshtc 8

お知らせ終わり。

2015/07/11(土) CI勉強会 #vshtc 9

本日のAgenda• Jenkins一択時代の終焉• ポストJenkins時代のCI

• ギルドワークスのCI事情

2015/07/11(土) CI勉強会 #vshtc 10

Jenkins一択時代の終焉

2015/07/11(土) CI勉強会 #vshtc 11

Jenkinsのもたらしたもの• 職人さん!ビルドお願いしやす!⇒ Jenkinsさんがビルドしといてくれたの使おう

• 自動ビルドとかわからないこわい⇒ Jenkinsさんならなんとかなる!

• この作業めんどいー。⇒ それJenkinsでできませんか?

2015/07/11(土) CI勉強会 #vshtc 12

Jenkins後の世界• 自動ビルドの「キャズム」超え

• CIを当たり前に

2015/07/11(土) CI勉強会 #vshtc 13

Jenkins後の世界• 自動ビルドの「キャズム」超え

• CIを当たり前に

• Jenkins職人

2015/07/11(土) CI勉強会 #vshtc 14

Jenkinsの"職人化"• あなたのところのJenkins、みんなメンテできますか?• どんなプラグインが入っているか、管理できてますか?• 新しいJobを追加するとき、誰がやっても同じようなJobを作ってくれますか?

• Jenkinsサーバが煙をあげていても、あなたは有給をとれますか?

2015/07/11(土) CI勉強会 #vshtc 15

Jenkinsがボトルネックに• 高度に専門化されたシェル + 手作業⇒ 高度に専門化されたJenkinsジョブ

• 結局トラブル時にはJenkins職人が呼ばれる• Jenkinsサーバでエラーが起こると色々終わる• 10年継ぎ足し続けたJenkinsジョブ、ってゾッとしない?

2015/07/11(土) CI勉強会 #vshtc 16

Jenkins以外の選択肢• ビルドツール・ビルドサポートツールの進化により、

Jenkinsのジョブ相当の物は簡単にスクリプトで書けるようになった

• ローカルのVMが流行るかと思ったらもうそこは クラウドとコンテナの世界 だった。

2015/07/11(土) CI勉強会 #vshtc 17

Jenkins以外の選択肢• なら、クラウド上に単純な定形作業だけをしてくれる、ビルドサーバ群があればいいんじゃね?

• そう、 CI as a Service や!!

2015/07/11(土) CI勉強会 #vshtc 18

ポストJenkins時代のCI

2015/07/11(土) CI勉強会 #vshtc 19

CI as a Service• 文字通り、サービスとしてCI(ビルド)を提供している

• Travis CI

• Circle CI

• drone.io

• Wercker

• Visual Studio Online

2015/07/11(土) CI勉強会 #vshtc 20

CI as a Service• だいたい以下のことを行う

• あたらしいVMを起動

• VMの環境セットアップ(yum install)

• ビルド・テスト環境のセットアップ(bundle install)

• ビルド・テスト(rake build )

• 別の環境にデプロイメント(git push heroku master)2015/07/11(土) CI勉強会 #vshtc 21

設定はこんな感じにmachine: environment: XCODE_SCHEME: SwiftLessontest: override:| - mkdir -p $CIRCLE_TEST_REPORTS/xctest - Xctool -project SwiftLesson.xcodeproj -scheme SwiftLesson -sdk iphonesimulator -reporter junit:$CIRCLE_TEST_REPORTS/xctest/test-result.xml clean test

(Circle CIの例)2015/07/11(土) CI勉強会 #vshtc 22

CI as a Service のメリット• サーバを用意せずに始められる• 使い捨てのクリーンな環境が保証される• CIサービス上の設定項目はそんなに無いので職人かを防げる• 無料枠がリッチなサービスが多い• 最初の導入ステップが簡単• 他のサービスとの連携が簡単で、リモート開発との相性◎2015/07/11(土) CI勉強会 #vshtc 23

デモ: CircleCIでビルドしてみよう!

2015/07/11(土) CI勉強会 #vshtc 24

CI as a Service のデメリット• 凝ったことをやり始めるとシェル地獄に陥る

• gradleやYeoman, rakeなどのビルドツールの活用必須• 大規模に走らせ始めるとランニングコストがかかる• サービスが止まった時に焦る

• ローカルでも動くスクリプトをサービス上でも叩く、とかしとかないと困る

2015/07/11(土) CI勉強会 #vshtc 25

Jenkinsへの影響• Jenkins自体も、プラグインの固まり方式以外の手段を取り始めている⇒ Jenkins Workflow Plugin

def flownode('master') { git url: 'https://[email protected]/hogehoge/workflow-test.git' flow = load 'groovy/flow.groovy' flow.builds()}

2015/07/11(土) CI勉強会 #vshtc 26

ギルドワークスのCI事情

2015/07/11(土) CI勉強会 #vshtc 27

使っているCI Service• Circle CI• Wercker CI

2015/07/11(土) CI勉強会 #vshtc 28

2015/07/11(土) CI勉強会 #vshtc 29

Why Circle CI?• Privateの無料利用枠で結構行ける• Linux環境のみならず、iOSのビルドもできる• チャットで結構素早くレスポンスが帰ってくるので安心• 環境追随もそこそこ速い

2015/07/11(土) CI勉強会 #vshtc 30

Circle CIを用いたiOSビルドパイプライン

2015/07/11(土) CI勉強会 #vshtc 31

2015/07/11(土) CI勉強会 #vshtc 32

Why Wercker CI?• そこそこ長期間サービス提供しているのに完全無償• ビルドコンテナの柔軟性が非常に高い

2015/07/11(土) CI勉強会 #vshtc 33

Wercker CIの活用どころ• 他のCIサービスでよく困ること

• yum install texlive-latex おせえええええ!!• gem install nokogiri おせえええええ!!

• 環境構築に時間が掛かる• werckerなら困らない

2015/07/11(土) CI勉強会 #vshtc 34

WerckerCIのビルドコンテナ• 背後でdocker or Vagrant LXCをぶん回しているっぽい• コンテナのビルド結果を定義できる• コンテナそのものをビルドして保存しておいてくれる• 保存したコンテナを自由に使える

2015/07/11(土) CI勉強会 #vshtc 35

ギルドワークスでの活用例• 書籍自動ビルドサービス• PDFのビルド環境は結構大変、かつ標準コンテナではできないこと

• calibreなどの、マニアックでそこそこ導入に時間がかかるソフトウェア入のコンテナを作った• https://github.com/posaunehm/calibre-jp-box

2015/07/11(土) CI勉強会 #vshtc 36

これからのCI

2015/07/11(土) CI勉強会 #vshtc 37

世は正に大CI時代

2015/07/11(土) CI勉強会 #vshtc 38

変えられない潮流• コンテナ式のDisposableな環境でのビルド・テスト• あるいは、ビルドしたコンテナをそのままクラウドへ• 「ちゃんと動いたものをそのまま本番へ」

2015/07/11(土) CI勉強会 #vshtc 39

それでもビルドは回っている• 「ビルドすること」は目的でなく手段

• ユーザの価値にならないと意味無いですよねー• 世の潮流を見ながら、自分自身の環境にあったビルド環境を考えましょう

• 言うても自家Jenkinsの要望はまだまだ強い

2015/07/11(土) CI勉強会 #vshtc 40

Enjoy, Continuous Integration!!

2015/07/11(土) CI勉強会 #vshtc 41