第7回 大阪Jenkins勉強会参加レポート

## はじめに

2016/06/18に開催された[第7回大阪Jenkins勉強会](http://connpass.com/event/315739)に参加したので、レポートを書きました。
2系になってどのように変わったのか興味があったのでそれを学ぶのが目的でした。
今回の勉強会はJenkins2.0がつい最近リリースされたこともあり、Jenkins2.0で変わったことや気付きに関する発表が中心でした。
Jenkinsの生みの親である川口耕介氏、Jenkinsの新しいUI(Blue ocean UI)の開発者James Dumay氏がゲスト招待されていて貴重な話を聞くことができました。

## タイムテーブル

|開始          |時間       |スピーカー        |タイトル         |
|:-------------------|:-------------------|:-------------------|:-------------------|
|13:30|15min|@Hidari0415さん|会場説明|
|13:45|30min|大畔祐輝さん 	               |初めての自動化、Jenkins|
|14:15|20min|@nobuokaさん 	       |Jenkins Pipeline Plugin と Android アプリ開発|
|14:35|30min|三浦一仁 (@kazuhito_m)さん  |実録！隣のJenkins2|
|15:15|30min|川口耕介 (@kohsukekawa)さん |Jenkins 2.0の紹介|
|15:45|30min|James Dumay (@i386)さん    |Blue ocean UI|
|16:30|45min|@Posauneさん              |Travis, Circle, そしてJenkins 2.0|
|17:15| 5min|@Hidari0415さん           | クロージング|

# 初めての自動化、Jenkins (大畔祐輝さん)

* GitbucketにあるリポジトリをJenkinsで取得してビルドする試みを初めてやってみたという発表
 * そこでの気付きや初心者がつまずくポイントの共有
* インストールしてからJenkinsのホーム画面を出すまでに躓いたところ
    * 環境はAWS EC2を利用していたが、Jenkinsで使用するポート(8080)を空けていなかった
    * インストール時に入力するパスワードの書かれているファイルがわからなくなって必死に探した
        * パスワード入力が求められるようになったのはJenkins2.0から
        * パスワードは(jenkinsホーム)/secrets/initialAdminPasswordにあり
* プラグインは推奨またはカスタムを選択できるが推奨を選択するのが無難
* 初めてインストールをしてみて気付いたこと
 * Jenkinsのインストールは2系になっても簡単なのは変わりなく、使えるようになるまでにそんなに設定はいらない
 * 設定で困ったときはヘルプを見よう
 * ヘルプを信じすぎるのは注意！自分の環境に合わせて読みましょう(特にパスなどは注意)
 * プラグインは本当に必要なもの以外はいれない。デフォルトの機能でだいたい何とかなることが多い

# Jenkins Pipeline PluginとAndroidアプリ開発 (@nobuoka氏 株式会社はてな)

[資料](http://nobuoka.github.io/presentations/2016/0618-osaka-jenkins.html#/)

* Pipeline Plugin
    * ジョブの流れをコード(GroovyによるDSL)で表現
* Pipeline Pluginが出る前と後の違い
    * (前)シェルスクリプトにゴリゴリ書く。複数ジョブの組み合わせで後続ジョブとして連結する(僕らもよくやっているやつ)
    * (後)リポジトリでジョブの処理の流れを記述したファイル(Jenkinsfile)を管理でき、柔軟に複雑な処理を書くことができる
* GitHubで複数のブランチを使って開発している場合のおすすめ構成
    * 新規プロジェクト作成時に「マルチブランチパイプライン」を作成
        * branch sourceにGitHubのリポジトリを指定する
        * ブランチ毎にサブプロジェクトとして管理され、ブランチ毎の結果が可視化できる
            * master/develop/feature
* リポジトリにJenkinsfileをコミット
    * Jenkinsfileにはジョブの処理を記述する
    * JenkinsfileはTravisCIでいう.travis.ymlのようなもの
    * リポジトリにJenkinsfileをコミットすることで、設定の差分、ジョブの処理を管理できる
* RejectedAccessExceptionが発生したら
    * セキュリティのためのエラーで、管理者が許可しないと使えない
    * Jenkinsの管理 => InProcessScriptAprovalを許可する
* PublishHtmlのパラメータが残念
    * Snippet Generatorで生成したGroovyScriptが間違っているらしい(既にIssueあり)

# 実録！隣のJenkins2 (@kazuhito_m 三浦一仁氏)

[資料](http://www.slideshare.net/miurakazuhito/jenkins20-7jenkins-jenkinsstudy)

* 会場での参加者アンケートで、Jenkinsは使っているが2系は触っていない人が多数
* 前段ジョブからソースを引き継ぐことが設定は便利(知らなかった)
* プラグインをシェルスクリプトで管理する
    * これはプレーンな環境からぽこぽこ立てるときは有効だ
* 設定に人間の判断でビルドを実行する設定がある(知らなかった)
    * Build Other Project Manual Style
    * 本番サービスへのデプロイは人間がぽちっとするとかあるけど、それをルールとして決めるのでなくJenkinsの設定が表現してくれるのはいいな
* 発表内容は、Jenkins1系でパイプラインを組み、それからJenkins2系へアップデートするお話
* Jenkins1系での構成
    * テスト => ビルド => 開発環境にデプロイ => 人間の判断で本番環境へデプロイ
    * これをBuildPipelinePluginでジョブを連結する構成
* Jenkins2系にアップグレード
    * Jenkins1.0をアンインストール
    * Jenkins2系の最新版をyumインストール
    * Jenkinsを起動
    * Jenkins1系からアップデートした人用のプラグインインストール画面が表示される
    * これまでのジョブは今までどおり使えるが、ジョブの新規作成でフォルダを作りパイプラインを2系に移植
    * Jenkinsfileをリポジトリにコミット
* 結論
    * 1系から2系のアップグレードは簡単
    * 2系になるとジョブ種が増えるので使うべし
    * 1系で大活躍したWorkFlowPluginは2系では標準装備になった 
    * パイプラインはすごく見やすいので使うべし

# Jenkins 2.0の紹介 (@kohsukekawa 川口耕介氏)
* Jenkinsの生みの親
* アンケートによるとJenkinsが無くなると8〜9割の方が困ると答えた
* Jenkinsをどこまで使っているかリサーチしてみると
    * CI：6割
    * CI + CD + 手動デプロイ：3割
    * CI + CD + 自動デプロイ：1割
* Jenkins2.0での変更点
    1. Jenkinsfile(パイプラインスクリプト)で変更の見える化
        * プロジェクトの中でコード管理
    1. パイプラインをできるだけ簡単に作れるようにした
    1. Github Organization Folder
        * Jenkinsにリポジトリを教えてあげるだけでJenkinsfileを勝手に見つけてくれて判断してくれる
        * これを使うと嬉しいところ
            * Jenkinsfileの設定は一度だけ
            * 変更したい場合はJenkinsfileをコミットするだけ
            * ブランチ毎のビルド履歴
                * TravisCIのようだ
            * PullRequestの自動ビルドと結果通知
                * これいいな！
    1. ジョブの設定画面で上下のスクロールがめんどいのを解消
        　* 上部にタブが表示させてジャンプできるようにした
    1. パイプライン
        * Jenkinsを再起動しても動く
            * ビルドをぶった切っても自動で復旧するらしい
        * 複雑な処理に向いている  
        * Jenkinsfileでバージョン管理
    1. おすすめプラグインを最初からインストール
        * 何を入れたら良いのかわからない人のために
        * 特に必要がなければがっつり入るのでカスタムインストールでも
            * プラグインの作者がそれぞれ異なるため、同じような設定が並んでしまうことがある
                * Githubの設定が3箇所もあるという現象が起きるなど
    1. 新規インストール時にパスワード聞かれるようになったのはセキュリティ対策の一環
* Jenkins2.0とメジャーバージョンアップにはなっているけど、怖がらず安心して使ってください
    * 2016/06/19時点でもう2.10に。どんどんでてくる

# Blue ocean UI (@i386 James Dumay氏)
* JenkinsのUIは過去10年変わっていない
* 使っていて楽しいものを作りたいをコンセプトにJenkinsの新しいUI Blue oceanを開発
* Blue ocean
    * 大事な情報だけを表示するように
    * featureブランチ毎のビルドが見られる
    * パイプラインがどのステージで失敗したかわかるように
    * ログにステップ毎の成功/失敗を可視化
        * TravisCIでよく見た画面に似ている
        * 開発者が解析を楽にできるように
            * 必要そうな情報だけを出してその他の情報を隠している
    * お気に入り機能でパーソナライズ(個人ビューを作れる)
    * リロードしなくてもよい
    * フリースタイルジョブを使っている場合、パイプラインを紹介する
        * 便利だなと使っていただけるように工夫

# Travis、Circle、そしてJenkins2.0 (@Posaune氏)
* Jenkinsの功績はなんといっても自動かを当たり前にしたこと
    * 人間がやるべきではないような面倒な処理はJenkinsにという文化が根付いた
        * むしろこれは人間がやらない仕事でしょ！と
    * Jenkinsはすご〜〜いcron
* プラグインは30分くらいで作れるから作ってみてください
* 進むJenkins職人化
    * Jenkinsの設定が属人化しているかという問いにYesと答えたのは会場のほぼ全員
* CI (as a) Service
    * TravisCi, CircleCI, wercker, etc...
    * 外部サービスはよく落ちる
    * ただ、フレッシュな環境の保証、環境依存のエラーの特定が容易
    * ビルドスクリプトは多くの場合Yaml管理
* Jenkins1系とCI Serviceの比較
    * CI Serviceはできることに制限がある
        * なんでもかんでもJenkinsでという思考がストップすることもある
    * スクリプトはコードで管理されるため、Jenkins職人しかしらない情報を極小化
* Jenkins2系
    * プラグインの推奨構成の導入
        * 「僕の考えた最強のプラグイン」をやめられる
    * PipelinePluginとJenkinsfile
        * 本日なんども聞いたお話
    * CI Serviceから影響を受けていると思われる
    * おすすめ構成
        * PipelinePlugin + DockerでCI Serviceで提供されているのようなフレッシュな環境からテスト実行が可能
* CI Service
    * 最近、各サービスの有料化や値上がりが激しくなっている
    * サービス自体が予期せず止まることもあり、声を発しても速攻対応されることはない
* Mac環境でのビルド
    * Macに関してはmac-miniをたくさん並べて・・・がよいのではないだろうか


## 所感
まず、この勉強会にはJenkins2系を触る前に知見を増やすのにもってこいだと思い楽しみにしていたが、参加してホントによかったです！
Jenkins2系になってすごい進化しているのがわかりました。
Pipeline、Pipelineと皆が言っているのが納得。確かに使わないという選択肢がない。
新しいUI(Blue ocean)導入したらガラッと変わってJenkins Lifeが更に楽しくなりそうですね。
これまでのJenkins(1系)やTravisCIのいいとこどりしたものが、Jenkins2系で実現できるのではないかとワクワクしてきました。手を出してみなきゃ
Jenkins+DockerでTravisCIみたいなフレッシュな環境でテスト実行いいね！と思いました。


----

# ～ただの宣伝～
* 最後まで読んでくださいましてありがとうございます。最後に宣伝をさせていただきます
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, Appium, SauceLabs, TravisCI, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
* connpassのグループも作っていますのでご興味ありましたら参加お願いします！　http://selenium-danwakai.connpass.com/