naichi's lab

3日後の自分(他人)への書き置き

2016.06.18 第7回大阪Jenkins勉強会 に参加してきた

ちょっと大阪までおでかけして勉強会に参加してきました。内容を軽くメモ。

長いので感想を先に。

  • Jenkinsすごい進化してる!
  • Pipeline 使わないと損!
  • 新しいBlue ocean UIめっちゃ使いたい!

目次

参加した勉強会

connpass.com

はじめに

Jenkins1.xは趣味でも仕事でも使っていました。 でも2.xはインストールしただけで全然使ってません。

2.0になってどーかわったのかなーってのが気になったので参加しました。

13:45 - 30min 大畔祐輝さん 初めての自動化、Jenkins

遅刻したので途中から参加。

GitBucketにあるリポジトリをJenkinsで取得してビルドする。

ってのを初めてやってみた!って発表。

  • Jenkinsのインストールは簡単!
  • 知らなくてもなんとかなる
  • プラグインによってはヘルプがおかしい
  • はじめてでも自動ビルドまでできた

14:15 - 20min @nobuokaさん Jenkins Pipeline Plugin と Android アプリ開発 (仮)

NOBUOKAさん

  • https://twitter.com/nobuoka
  • はてなの中の人
  • Android / UWP
  • Web (Scala Java TypeScript Perl0
  • Android版はてなブックマークとか

Pipeline Plugin

  • ジョブの流れをコードで表現
    • GroovyによるDSL
  • Pipeline pluginにより実現

Pipeline Pluginの以前との比較

以前は

  • Shellスクリプトにゴリゴリ書く
  • 複数のJenkinsジョブを組み合わせる

複数ジョブ組み合わせて〜ってやってましたわ・・・

PipelinePluginだと

  • リポジトリで処理の流れを管理できる
  • 柔軟に複雑な処理をかける
  • 失敗箇所がわかりやすい

デモ

  1. 新規プロジェクト作成(マルチブランチパイプライン)
    • Gitで複数のブランチを使って開発してる時に便利
  2. ブランチごとに状況が見れる
    • f:id:naichilab:20160618141429p:plain

Androidのテスト

  • Android SDKのセットアップ
  • SDKコンポーネントのインストール
  • エミュレータ起動
  • テスト実行
  • エミュレータ終了
  • とか。

ビルドの成否を通知

  • Slack
  • GitHub

これまでの知見

オススメ構成(Git x 複数ブランチ)

  • PipelinePluginのMultiBranchプロジェクト
    • Branch sourceとしてGitリポジトリを指定
  • GitリポジトリにJenkinsfileをコミット
    • ここにJenkinsのジョブの処理を記述

RejectedAccessExceptionが発生

  • セキュリティのためのエラー
  • 管理者が許可しないと使えない
  • Jenkinsの管理 -> InProcessScriptAprovalを許可

Shellスクリプトの標準入出力やエラー出力はファイルを介す

めんどいね。Issue立ってるらしい。

publishHtmlのパラメータ

Snippet Generatorで生成したGroovyスクリプトが間違ってるらしい

これもIssue立ってるらしい。

AndroidManifest

  • ファイルパスがエスケープされない
  • / => %2F
  • 例外が発生してAndroidビルドがとまる

なぜかMultibranchのときだけ発生する。

まとめ

Pipeline使うと幸せになれるよ!

資料

nobuoka.github.io

14:35 - 30min @kazuhito_mさん 実録!隣のJenkins2

三浦カズヒトさん

この人の話を聞きたくて来た

実Jenkins!

すげー早口だけど面白かったw

Jenkins1.xの場合

やること

  • テスト→ビルド→開発環境にデプロイ→(人間の判断で)本番にデプロイ

デモ

  1. Jenkinsインストール 5分ぐらい
  2. Job3つ作ってつなぐ。ゴリゴリ書く。これで開発環境デプロイ完了
  3. 本番環境デプロイ
    • Build Other Project Manual Style?みたいなものがあるらしい

これが伝統的な1.x Style。

自分もずっとこの感じでやってた。

Jenkins 2.xの場合

デモ

  1. Jenkinsアンインストール
  2. Jenkins 2.9.1.1をインストール(yum経由)
  3. Jenkins起動
  4. 1.xからアップデートした人用のプラグインインストール画面が出る
  5. 既存のJob実行(1.xからのジョブがそのまま動く)
  6. 新規Job作成画面が項目増えてる
  7. ジョブ(フォルダ作成)
    • これいいな!
  8. ジョブ作成(パイプラインを2.0に移植)
    • ジョブ名日本語使えるのか
    • サンプルいくつかあり
    • すげー書きやすそう
    • 結果も見やすい
  9. 人間の判断で本番デプロイ。はできるのか?
    • もちろん。→Groovyスクリプトに書いていく。
    • 書き方はPipelineSyntaxというヘルプを見ればわかる。
      • Generate Groovy でスクリプト生成される。→コピペ
    • めっちゃ使いやすそう
  10. JenkinsfileをGitにPush
    • ソースファイルにJenkinsfileを含むことができる。
    • 超便利

まとめ

  • 2.0のジョブ:Pipeline いい!

ほんとよかった。これは使う。

資料

www.slideshare.net

15:15 - 30min 川口耕介さん Jenkins 2.0の紹介

  • 川口さん
  • Jenkins生みの親
  • CloudBees
  • Jenkins 100k突破
  • Jenkins、次の10年どうするか

f:id:naichilab:20160618155906j:plain:w640

Jenkins利用の拡大

  • Jenkinsの用途の拡大
  • ビルドだけでなくデプロイ、運用まで
  • どこまで達成したか?
    • CIまでが6割
    • CD + 手動デプロイ 3割
    • CD + 自動デプロイ 1割

CIだけでなくCDまで行えるように

  • パイプライン

今後10年

  • GUIで操作→NG
  • コード化(As Code) が必要

パイプラインを作ってみよう

  • すでに前の2人紹介したのでパスw
  • Jenkinsfile == パイプラインスクリプト
    • 並列処理
    • クリーンナップ作業
    • 人間の作業を含める
    • 実行結果の表示

GitHub Organization Folder

  • JenkinsにGitHubのOrganizationを教えておくだけで、Jenkinsfileを見つけて勝手に判断してくれる。
  • 利点
    • Jenkinsの設定は一度だけ
    • Jenkinsfileをコミットするだけ
    • ブランチ別のビルド履歴
    • プルリクエストの自動ビルドと結果の通知

誰でも書けるように

  • Snippet
  • ドキュメント

パイプラインの抽象化と再利用

  • container_build 'jenkinsinfra/bind'

パイプラインまとめ

  • 複雑な処理にうってつけ
  • テキストでかくのでバージョン管理
  • ジョブが多くてもテンプレート化
  • Jenkinsを再起動しても続く

Jenkins再起動しても続くってマジか!!!

UIの改善

  • ジョブ作る画面とか
  • 設定画面のタブ分けとか

「要組み立て」からの脱却

  • Jenkinsを初めて使う人は組み立てが必要
  • 最初は玄人向けだったからよかった
  • 普及が進んできて敷居が高くなってきた
  • 最初から8割の要求を満たす
  • インストール時におすすめプラグインを出すのはそういう意図

ドキュメンテーション

ユーザーを守る

  • 鍵のかかっていないJenkinsを狙うBOT
  • 最初から安全なデフォルト

後方互換生

  • コアは1.xと同系列
  • 今までと同じアップデートの仕方で!

Jenkins 2.0まとめ

  • Pipeline
  • UI
  • 要組み立てからの脱却
  • セキュリティ
  • CI -> CD

15:45 - 30min James Dumayさん Blue ocean UI

  • ジェームスさん
  • オーストラリアから

f:id:naichilab:20160618160134j:plain:w640

BlueOcean

  • Jenkinsの新しいUI
  • JenkinsのUIは10年変わっていない
  • UIは使ってて楽しいものじゃないといけない
  • Jenkinsをもっと簡単に使えないといけない

新しいダッシュボード

  • ジョブ一覧
  • 状態
  • お気に入り
  • 大事な情報のみ表示
    • 意図的に情報量を減らしている

f:id:naichilab:20160618160213j:plain:w640

パイプライン

  • パイプラインで起こっている全てを一覧できる
  • ブランチごとの確認も
  • ほとんどの場合最新のビルド結果さえ分かればよい
  • PullRequestタブ
    • プルリクエストの情報を表示できる
  • 裏で動いているのは既存のパイプライン

f:id:naichilab:20160618160302j:plain:w640

パイプラインの処理結果

  • どのステージで失敗しているかが一目瞭然
  • ログをステップごとに分割して表示できる
  • 失敗したパイプラインを見ている時、失敗部分に最初から注目できる

f:id:naichilab:20160618160332j:plain:w640

成功したパイプライン

  • All Green
  • 必要なものだけを見せる

f:id:naichilab:20160618160402j:plain:w640

パーソナライズ

  • ダッシュボードを開発者1人1人のためにカスタマイズできる
  • お気に入りのパイプライン、関連するパイプラインに関する情報だけを表示するとか
  • 入力が必要なパイプラインを先頭に表示とか
  • 実行中のパイプラインとか
  • 結果によって表示順も変わる
  • リロードをJenkinsから排除できた!

実物のデモ

  • 開発中のバージョンのBlueOceanをデモ
  • お気に入り押した時のアニメーションとかこだわってる
    • pixelレベルの作り込みが積み重なって大きな経験の違いとなる
  • より簡単に使えるようにしたい

感想

Blue Oceanすごい。これは使う。

16:30 - 45min @Posauneさん Travis, Circle, そしてJenkins 2.0

@Posauneさん

  • ギルドワークス株式会社
  • 前川さん
  • ALM(Application Lifecycle Management)エンジニア
    • アプリケーションの一生を面倒見る

ギルドワークス

Jenkinsの功績と課題

  • 自動化を当たり前に
    • 職人技から自動ビルドの世界へ
    • 豊富なプラグイン
  • 自動化の一例
    • ビルド・テスト・デプロイ
    • 定期的なファイル収集
    • 簡易ChatBot
    • アップデート自動配信
  • Jenkinsすごい
  • 結果的にJenkinsの設定が職人技になる
  • Jenkins職人の誕生

Jenkins一択時代の終焉とCI Serviceの波

  • Jenkins以外を選択できるようになった
  • GitHubを始めとしたソースコードをオープンな場所に置くことが一般化した
  • ビルドもオープンに
  • CI as a Serviceとは?
    • クラウド上で構築されたビルドサーバ
    • Circle ci / wercker / bitrise / vs online とかとか
  • ビルド・デプロイごとにフレッシュなVMを起動する仕組み

Jenkins 2.0のブレイクスルー

  • 推奨構成の導入
    • できるだけ推奨構成だけで実行できるようにする
    • まずはPipelinePluginとDSLでできないか考える
  • Docker pipeline plugin
    • フレッシュなVM

CIサービス事情

  • どんどん値上げしてる
  • サービス自体止まることもある
  • なんでもかんでもCIServiceで、、、は辛くなってきた

Jenkins 2.0

  • CI Serviceからの影響を大きく受けている
  • さらに導入の気軽になってきている
  • クラウド上にCIファームを作るという選択肢も

これからのCI

  • 職人化したJenkinsはどこかで区切り
  • 自分たちにあったCI/CDを考えよう

まとめ

Jenkinsすごい進化してた。 使ってみよう。

登壇された皆様お疲れ様でしたー。