Jenkinsユーザカンファレンス Tokyo 2015 メモ


# はじめに

2015/01/11 に開催された、Jenkinsユーザカンファレンスのメモ書きです。
発表資料はきっと公開されるとのことですので、その補完になればと思います。

# 前座資料

* 参加者アンケート結果
    * 使用言語
        * Java が圧倒的
    * アップデート頻度
        * ほとんどしない 40%
	* 運用の課題
	    * アップデート時の互換性
	    * 環境構築
	    * プラグインのデフォルトインストール
	    * 設定の簡略化


# 基調講演

http://build-shokunin.org/juc2015/sessions/#satta-0

川口さんの基調講演。
前半はJenkinsの今について。
後半はWorkflow Pluginについて。

## メモ

* インストール数 + 40%
* Share
    * 東ヨーロッパ
        * CIをやっているグループで使っているツール
        * 1位: JUnit
        * 2位: Jenkins 70%
        * *  : Hudson 8%
* コラボレーション
    * Amazon/Google/Docker
    * シリコンバレー連ドラ
        * エピソードにJenkinsが登場
            * 「これでデモに間に合う！」
* Community のあれこれ
    * DotCi
        * GitHub専用のJenkinsディストロ
        * 設定情報はYamlでリポジトリ管理
        * CIaaS っぽい
        * Dockerとも深く連携
        * バックエンドはMongoDB
    * UI更新
        * 今後も更新予定
        * 新しいジョブをもっと簡単に作れるように
    * Servlet 3.0?
        * UXがらみ
    * Chef/Puppet
        * ファイル指紋によるファイル追跡
        * Chef/Puppet にアクセスしてJenkinsがビルドしたソースがいつデプロイされたか追従する
        * Ansible などにも対応予定
    * Docker
        * DotCI
        * 公式イメージ
    * 受け入れテスト
        * プラグインの組み合わせ
        * LDAP のテストなど
    * スケーラビリティ
        * Master/Slave の NIO化
        * CLI通信の利用を検討
        * Maven2ジョブの高速化
    * Workflow プラグイン
        * 一番力を入れている
        * 7年前は、１つずつ処理を自動化していた
            * それをチェーン化したい
            * Pipelineがあったが分岐処理や多段階プロセスなど複雑化
            * Blue/Green のように、少しずつ処理を進めていって完結するフローを実現したい
        * 機能
            * いろんな処理が複雑に絡み合っていても簡単に記述できる
            * 制御構造
            * 長時間ビルドのサポート
                * Jenkinsが再起動しても継続できる
            * DBスキーマ変更など、人間判断が必要な時に許可を求める仕組み
            * 途中の予期せぬエラーが起きても再開できる
            * 似た処理の再利用
            * テキストファイルで一箇所に記述できること
                * 今までの試みから
        * いろんなプラグインを組み合わせて実現するのは面倒なことも多い
        * テストなどしていて途中でJenkinsが落ちた時でも、
          プロセスが残っていれば継続していてくれる
            * 継続渡し方式
            * プログラムの状態をセーブポイントで永続化
                * チェックポイント
            * 制約
                * DB Connection とか呼びまくるとそれはそれで問題になりうる
            * 失敗時に元の状態からやり直す機能（Enterprise版）
        * DEMO
            * ジョブの画面にパイプラインっぽい表示が...!
	            * Enterprise版とのこと
        * 拡張ポイントたくさん用意



# はてなにおける継続的デプロイメントの現状とDockerの導入

株式会社はてな 信岡 さん 
http://build-shokunin.org/juc2015/sessions/#s505-1

Githubを中心とした開発フローと、そこにJenkinsとDockerがどう関わっているか

##メモ

* Jenkins
    * それぞれのサービスでJenkins
        * 昔: master/slave 構成のJenkins 1台
        * サービスごとに、依存ライブラリが違うので
        * 関係者が少ないほうがメンテしやすい
    * 管理
        * Jenkins環境構築はChef
            * 本番サーバーと近い状態のJenkins環境
        * 設定
            * スクリプトファイル１つを実行
    * Android Emulator Plugin を使用
    * Github push を Trigger とする
        * library 更新
        * テスト更新
            * 失敗時: Slack, GH;E へ通知
            * GH;E への通知は curl で行っている
            * Slack への通知は Slack Notification Plugin

* Github
    * Github 上で、テストの失敗・修正の確認を行う
    * Merge は Merge ボタンで行う

* デプロイ
    * staging ブランチに Pull Request
        * リリース内容を明記
        * リリース時のチェックリストを明記
    * Capistrano3
    * 課題
        * 自動化がまだまだ不十分
        * Jenkinsは使用していない
            * 動作確認の報告で人間の手が必要
        * Workflow Plugin を検討
            * シェルスクリプトを Workflow に変えたい

* 動作確認
    * 誰のため
        * 開発者本人ではない
            * local環境がある
        * 非開発者/遠隔開発者
        * チーム外
        * 社外
    * git ブランチ単位で アプリケーションを使うように
    * 今まで
        * Portで分けて、同じサーバー上に各アプリケーションに振り分け
            * 課題
                * libraryやファイルが共有されてしまう
    * Dockerの採用
        * Portの解決は、Proxy用Plackアプリケーションで受けて振り分け
        * イメージにブランチ名に対応した Tag を付与
        * Jenkins上でコンテナ作成
            * rake タスクにしてある
    * Jenkins が開発サーバー上と同居しているので簡単


# JenkinsとPuppet+ServerspecでインフラCI

GMOペパボ株式会社 常松 さん
http://build-shokunin.org/juc2015/sessions/#satta-2

## メモ

* puppet
    * 構築に半年かかった

* serverspec
    * manifest 変更時には必ず Serverspecも書く
        * そういう文化ができてきた
    * 全ロールのテストをJenkinsで実行
        * 構築中
    * 今後の予定
        * 定期的に本番環境へServerspec実施
            * nagiosやzabbixでは拾えないものを
                * confファイルの中身や、packakgeのバージョンなど、誰かが何か変更してないか確認する

* Jenkins
    * GithubリポジトリをPolling
    * 環境はVagrantで
        * Dockerだと本番環境との差分がある
    * ジョブ間のProcess管理
        * （神からのアドバイス）1ジョブで1ビルドのほうがいい


# 「Infrastructure as a CodeにおけるJenkinsの役割」 〜環境構築も継続的インテグレーションを行う時代です〜

株式会社サイバード 本田 さん
株式会社サイバード 藤原 さん
http://build-shokunin.org/juc2015/sessions/#satta-3

環境構築の各レイヤーにおける自動化の手法と、Jenkinsの役割。
Jenkinsの冗長化についても少し。

## メモ

* Chef Server
    * Auto scale 対応
    * 複数のPaaSだったので構成管理を共通化したい

* 問題
    * レシピのコード複雑化
        * 冪等性の担保がされない
    * Chef Server との接続エラー
        * 負荷に耐えられない
        * ログをどこにもUpしておらず追跡が面倒
        * Cookbook の更新が手動

* 解決
    * Provisioning Toolchain の考え方を元に検討
        * Provisioning をレイヤー化
	        * Bootstrapping
	            * OS install
                * Chefの実行ユーザ作成
            * Configuration
                * M/W Setup
                * Chef Solo
            * Orchestration
                * Application Provisioning
                * Deploy
                * zabbix-agent start
                * Serf を実行
                * Jenkinsは、Serfクラスタの参加イベントを検知してビルド
            * (オリジナル) Releasalization
                * Orchestration のテスト
                * サーバーを本番環境へ投入
    * Chef レシピ開発
        * chef-zero の使用を始めている

* Jenkinsの冗長化
    * AWS
    * cold stand-by
        * jenkins stop時
            * Sert が通知
               * cold stand-by が Active
    * Serf
        * SSH経由からSerf経由にできる
	        * 余計な穴あけが不要に
    * データ同期
        * lsyncd

# LT大会

http://build-shokunin.org/juc2015/sessions/#lt


## Jenkinsを使った継続的Webセキュリティテスト

株式会社ビットフォレスト 市川 さん

* よくあるフロー
    * 開発
    * 外部の専門チーム
        * リリース前にいろいろ見つかる
    * 修正
        * あたふたする

* 理想
    * 開発初期からセキュリティテスト実施すべき
        * コストかかる
    * みんな思ってる
        * GTAC 2013: Finding XSS at Google Scale

* vaddy
    * CI に組み込める脆弱性テストサービス
    * 無料プラン 有
    * Jenkins plugin 有


## Jenkinsおじさんお堅い金融系企業に就職

三菱総研DCS 土井 さん

* Jenkins や Redmine などをVMにパッケージ化
	* 新しい案件でもすぐに他の案件と同じ開発ツールが用意できる
* Jenkinsで、正確な時間で正確な処理を行えるように

## Jenkinsおじさんと楽しい連携ツールたち

NTTソフトウェア株式会社 古野 さん

* Slack
    * チャットアプリ
    * Slackプラグイン
        * Emoji 活用
* Gitlab
    * Gitlab Merge Request Builder Plugin
* deploygate
    * gradle-deploygate-plugin を利用


## ゲーム業界の人がJenkinsさん3Dモデルで遊んでみた

こかわ さん

* Jenkinsさん テカる
* Jenkinsさん 増える
* Jenkinsさん 爆発する
* Jenkinsさん サイレン化する


## CI”じゃない方”のJenkins

株式会社サイバード 三浦 さん

* 集計とか分析とか
* オレオレスクリプトをジョブ化して共有すれば便利