progrhyme's tech blog

主にIT関連の技術メモ

「Jenkins ユーザ・カンファレンス 2018 東京」に行ってきた

昨日、掲題のイベントに行ってきました。
下がイベントのページです。

以下、聴講したセッションのログや感想などを記します。

聴講したセッションとその資料

タイムテーブルはこちらの通りでした。
メインセッションの一部は2トラックになっていましたが、自分は最初から最後までずっとA会場であるメインホールの方にいました。

自分が聴講したセッションの資料を、把握している限り貼っておきます。
なお、セッション資料は後ほどとりまとめて日本Jenkinsユーザ会からシェアされるようです。

基調講演 @kohsukekawa

資料見当たらず。

Accelerate with Jenkins X @jdrawlings

資料見当たらず。

Continuous Delivery Best Practices with Jenkins and GKE @yuki_iwnr

資料見当たらず。

AWSとJenkinsを活用して1年間で約500回商用デプロイした話とKubernetes活用 @takamii228

LT: Jenkinsを簡単運用ツールとして活用して非エンジニアに喜ばれた話 @morihaya55

LT: DevOps World | Jenkins World 2018の参加報告 by 坂本さん

資料見当たらず。

LT: Jenkinsで運用業務の改善をしてみて気づいたこと @y0shirak0

LT: JenkinsとCodeBuildとCloudBuildと私 @irotoris

感想

このイベントはタイムラインか何かで見かけたのがきっかけで、「お、Jenkinsの大きめのユーザ会があるみたいだ。Jenkins使うし、行っとくか」ぐらいのノリで参加しました。
…が、(良い意味で)意外に濃密な学び・気づきがあり、参加して良かったなーと思っています。

まず、基調講演ではJenkinsの生みの親であり、Cloud Bees社CTOのKawaguchi氏から、Jenkinsコミュニティの現状や、直近リリースしたJenkinsの機能や、いま走っている主なプロジェクトの紹介がありました。
これからという点では、「Configuration as Code」「Evergreen」「Cloud Native Jenkins」そして「Jenkins X」は特に注目度の高いプロジェクトだと思います。

話を聞いてて思ったのが、「Jenkins開発チームは、Jenkins運用のつらみ(〜Jenkinsの課題)をよく理解している」ということでした。
だからこそ上のようなプロジェクトが動いており、今後そういったつらみは解消されていくだろうなと思いました。

懇親会では、Jenkins XメインコミッタのRawlings氏の隣に座って色々話すことができました。

また、ノベルティとしてステッカーとTシャツを頂きました。
ありがとうございました!!

次の大きなイベントとしては、10/16に「Jenkins Day Japan 2018」があるそうです。

気になる方は是非足を運んでみてはいかがでしょうか。

SPECIAL THANKS

参考

聴講ログ

まだネット上で資料が確認できていないセッションについて、手元に書いていたログを貼っておきます。

基調講演 @kohsukekawa

  • 自己紹介
    • Kohsuke Kawaguchi
    • CTO at CloudBees, Inc.
  • Digital Darwinism
    • ソフトウェア環境における変化が大きい
      • 製品における役割が大きく
      • いかに高い品質で速く届けるか
    • 例) airbnb, テスラ
    • Jenkins自身も進化しないといけない
  • Jenkins開発について
    • 最初は趣味プロジェクトだったらしい
  • Jenkins Area Meetups
    • 24K members
  • CloudBees
    • Jenkinsのプロジェクトに関わる
    • 単にOSSを出すだけでなく、エンタープライズ向けに必要なソリューションを提供する
  • Jenkins Features / 注目プロジェクト
    • Pipelineについて
      • JenkinsファイルをGit管理
      • コアの部分の書き換えをやってる => よりロバスト
      • 直列と並列のフローを柔軟につなげるように
    • Blue Ocean
      • 展望
        • plugin化
        • Jenkinsの中に取り込む
          • Blue Oceanという特別な名前をなくす
    • Evergreen
      • 最初から必要なプラグイン等が組み込まれている
      • batteries included
      • installして5クリック以内(5分以内)で何かできる
      • plugin更新の手間なども削減する
      • SaaS CIがライバル
      • 最初から必要な機能を満たすようにする
        • 例) GitHub連携, Dockerサポート
        • コアかプラグインかはユーザにとってはどうでもいい
      • 設定も環境に応じていい感じになるようにしたい
        • 例) AWS使ってたらS3に設定を保存するとか
      • Jenkins Coreがkernelなら、EvergreenはLinux Distribution
      • Chromeのように自動アップグレードを実現する
        • どのプラグインのどのバージョンをバンドルするかは、コミュニティが責任を持って配信する
        • 問題が起こったら30分以内に対応できるように
      • Jenkinsそのものを継続的デリバリする
    • Configuration as Code
      • Jenkinsの設定変更にソフトウェア開発のフローを取り入れる
      • YAMLで設定
      • syntax check
      • 先週v1がリリースされた
      • 1年半前ぐらいからPRAQMA社の人と2〜3人のコアメンバーで始めた
    • Cloud Native Jenkins
      • 大規模向け
      • いま
        • XMLをfile systemに置いてる
      • わかりやすくいうと、コンテナで動くようにするということか。
      • いくつかの機能が出てきている
        • 最初はAWS向けにプラグインを書いた
          • artifactをS3に保存
          • CloudWatch Logsにビルドログを吐く
          • ↑2つがストレージを多く使う
      • これから
        • $JENKINS_HOME要らなくする
        • ゆくゆくは分散化する
          • K8sで動かせるようにしたい
      • Cloud Native SIG (分科会)
    • Jenkins X
      • 詳しくはRawlings氏のセッションで
      • Webアプリ開発にフォーカス
      • 余計なものは見せない
        • 「車に乗る人にエンジンルームの中身は見せないようにする」
      • 全体の複雑度は部品の複雑さの合計より下がっている
      • Jenkins - 車
      • Jenkins X - 新幹線
        • 細かく選べないけど、より速く目的地に着ける
  • 複数のプロジェクト間の関連
    • Cloud Native JenkinsとConfiguration as Codeは切っても切れない間柄になってる。

参考:

Accelerate with Jenkins X @jdrawlings

  • James Rawlings氏
  • Jenkins X知ってる人ー?
  • Jenkins Xとは
  • Accelerateの本
    • 読むといいよ
    • DevOpsに関する様々な会社を調査したもの
      • 過去数年に渡るDevOpsの現状
    • どのくらいの頻度でデプロイするか
    • コードがデプロイされるまでのリードタイム
    • deployにどのくらいの割合で失敗するのか
  • バージョン管理
    • Jenkins XではGitOpsを自動的に実現する
      • 全部設定をGitで管理する
  • デプロイの自動化
    • Jenkinsfileを使ってパイプラインを自動化
    • アプリのプレビュー環境を作る
  • trunkベースの開発を推奨
  • ゆるやかに結合されたアーキテクチャ
  • Microservicesを簡単に実現
  • 開発者が余計なことに煩わされないように
  • ダイアグラム
  • なぜK8s?
    • メジャーなクラウドプロバイダがみんなK8sを提供している
    • K8sは何をもたらしてくれるのか
      • ネットワーク
      • ローリングアップグレード
      • リソース制限
      • コンテナを詰め込める
      • リソース効率がいい
    • 標準化の役割
      • コストを下げられる
  • どういうコンテナオーケストレーションツール使ってるか
  • K8sは難しい
  • デモ
    • jx create cluster gke --prow
    • jx get env
    • requirements.yml
      • どのアプリケーションがインストールされるか
    • jx env ... 環境を切り替えることができる
    • jx logs - ログ見る
    • jx create quickstart - golang-httpを選択
      • Project name: tokyo-2
    • GitHubリポジトリが作られる
      • Bitbucket等とも連携可能
    • デプロイしたりテストするジョブが作られる
    • git pushして
    • jx get activity... でパイプラインの状況がわかる
    • /approve とコメントすると本番にデプロイされる
  • JenkinsXはK8sをラップしてWebアプリ開発〜デプロイのフローを整備してくれる。 ブートストラップの手間を省いて初速を上げるだけでなく、GitOpsによるCI/CDを整える ことで、開発/リリースプロセスも矯正されそう。

参考:

Continuous Delivery Best Practices with Jenkins and GKE @yuki_iwnr

  • 自己紹介
  • アジェンダ
    • Jenkins Journey
    • CD wi/ Jenkins & Spinnaker
  • Jenkins who?
    • Build server
    • Pluggable architecture
  • The Jenkins Journey
    • Day 1 - はじまり
      • Problem:
      • Solution:
        • 使えるマシンにJenkinsを入れて動かす
    • Day 100 - 多数のエージェント
      • 問題:
        • ビルドが低速
        • ビルドキューが多い
      • 解決策:
        • より多くのマシン
        • Jenkins Agent Nodes
    • Day 150 - Diskが足りない
    • Day 300 - ビルド依存性の狂気
      • 問題:
        • 各ジョブで必要な依存が増えていく
        • ジョブごとに依存が異なる
      • 解決策:
        • ビルド環境をコンテナ化する
        • Docker pluginを使う
    • Day 310 - ジョブ設定が困ったことに
      • 問題:
      • 解決策:
        • Pipelineで書いてGitに入れる
    • Day 365 - スケールがつらい
      • 問題:
        • 新しいノードを追加するのにうんざり。利用されていない時間もスケールダウンしない
      • 解決策:
        • ビルドエージェントのDockerイメージを作る
        • エージェントをGKEで動かす
    • Day 412 複数のJenkinsインストールを管理
      • 問題:
        • 各チームがそれぞれ互換性のないプラグインを必要とする
      • 解決策:
        • Jenkinsのインストールを再現可能にする
          • Helmとか
  • HelmでJenkinsをデプロイしよう
    • values.yaml に変数を注入
      • インストールするplugin
  • AgentをK8sで管理
    • オートスケール
    • プリエンプティブノード
    • Jenkinsfile
pipeline {
  agent {
    kubernetes {
      label '...'
      defaultContainer 'jnlp'
      yaml """
apiVersion: v1
kind: Pod
:
"""
    }
    stages {
      :
    }
  }
}
  • Agentのbase imageの管理
    • CloudBuild使うといいよ
  • Cloud Storageにビルド成果物を保存
    • pluginがある
  • Demo
  • どうやったらカナリアリリースできるの?
  • K8sには複数クラスタがあるよ
  • Kubernetes CLI Plugin
    • どのクレデンシャルIDを使うか
    • 向き先とユーザを切り替えることができる
  • Blue/Green Deployment
    • Pipeline Scriptに記述
  • Spinnakerについて
    • インテグレーションポイント
        1. JenkinsからSpinnakerを呼ぶ
        1. Jenkinsでイメージをビルドしてpush
        2. Spinnakerでデプロイ
        1. Spinnakerのデプロイパイプラインの中でJenkins Jobを起動し、結果を待つ
    • カナリアデプロイして分析し、その結果によって本番リリースするかロールバックするかの制御もできる

LT: DevOps World | Jenkins World 2018の参加報告 by 坂本さん

  • DevOps World | Jenkins World
    • CloudBee, Inc主催のJenkins/DevOpsに関する世界最大規模のイベント
    • 39か国からの参加者
    • Jenkins World => DevOps Worldに改名された
  • 印象
    • * as Codeの波
    • コンテナのCI/CD
    • DevSecOps
  • Ephemeral Jenkins
  • コンテナのセキュリティ