この記事では、2019年6月28日に開催された「Jenkins Xで実現する!クラウドネイティブなCI/CD~より早く、より簡単な継続的デリバリー」の内容をご紹介いたします。
Kubernetes対応の自動CI/CDプラットフォーム「Jenkins X」が2018年3月に発表されてから1年あまり、日本でも確実にJenkins Xへの注目は高まっています。このたび、CloudBees 社のデベロッパー アドボケイトViktor Farcic 氏をお招きして開催した当セミナーでは、Jenkins Xが生まれた背景・設計思想からデモによる具体的な機能紹介まで、「Jenkins Xで何ができるのか」「Jenkinsとの違いは」など、Jenkinsは知っているし使っているがJenkins Xはまだこれから、という方にとって今後の参考になる情報をご提供できたのではないかと思います。活発な質疑応答からも関心の高さがうかがえたセミナーの内容を簡単にご紹介いたします。
セッション 1: クラウドネイティブとCI/CD、Jenkins Xとは?
最初のセッションは、テクマトリックス株式会社 プロフェッショナルサービスエンジニア 酒井より、DevOps、CI/CD、クラウドネイティブなど、JenkinsおよびJenkins Xを生み出すに至った技術的背景について整理し、JenkinsとJenkins Xの違いについてご説明しました。
「ソフトウェアがかつてなく重要になっている」このことがすべての根底にあります。ソフトウェアをどれだけ速く確実にリリースできるかが企業を差別化し、競争力の源になっています。そのために開発部門と運用部門が協力してソフトウェアデリバリーを加速する、これがDevOpsです。DevOpsのベストプラクティスを効果的に実践している組織とそうでない組織では、コードのデプロイ頻度などのパフォーマンス指標は桁違いであるといいます。小さなサイクルでビルドやテストを繰り返す継続的インテグレーションと、その発展形であり運用プロセスまでを含む継続的デリバリー(CI/CD)は、いずれもDevOpsのベストプラクティスに含まれます。JenkinsはCI/CDを推進するツールです。
いっぽう、Jenkins Xは「KubernetesのためのCI/CDプラットフォーム」と定義されます。Kubernetesとは何か、なぜKubernetesが重要なのでしょうか? その背景には、近年のソフトウェア開発を劇的に変えたいくつかの要素があります。疎結合の小さなサービスの集合として迅速なアプリケーションのデリバリーを可能にするマイクロサービスアーキテクチャ、OSの仮想化により同一ホストでの異種技術の混合を提供するコンテナ技術、結果としてコンテナ管理とオーケストレーションを容易にするKubernetesが台頭しました。しかし、単にクラウド上にアプリケーションを構築したとしても、アプリケーションのスケーラビリティが自動的に増すわけではないため、クラウド上での実行に最適化されたアプリケーションを構築するためのアーキテクチャ、つまり「クラウドネイティブ」アーキテクチャが必要となります。
こうした背景から、Kubernetes上でのクラウドネイティブなアプリケーション開発でCI/CDを実践するためのプラットフォーム「Jenkins X」が生まれました。Jenkinsと比較したJenkins Xの特徴としては、どのようなプロセスにも対応するJenkinsに対して決まったプロセスがあるJenkins X、GUI優位のJenkinsに対してCLI/API優位のJenkins X等の違いがあります。
セッション 2: 《特別講演》継続的デリバリーのためのレシピ
2 番目のセッションでは、CloudBees 社のデベロッパー アドボケイトであるViktor Farcic 氏より、改めてJenkins Xは「何を」「どのように」実現するのかを説明した後、Jenkins Xを使用したプロジェクトの作成から、Jenkins Xがデフォルトで提供するプロセスに沿った開発作業・デプロイメントの流れをデモンストレーションで紹介しました。
Farcic 氏はJenkins Xが実現するべき要件として「クラウドネイティブ」、「クラウドプロバイダー非依存」、「ゼロから無限大までのスケーリング」、「everything-as-code」、「早く、非常に簡単であること」等を挙げ、それを実現する手段として、Kubernetes、サーバーレスソリューションとしてのTekton、GitOpsおよびChatOpsとしてのProw、パッケージングソリューションとしてのHelm等の要素を挙げました。ただし、チーム全員がこれらの要素に精通する必要はない、Google等のトップ企業も実践しているベストプラクティスを実現するツールとプロセスをバンドルし、エラスティック(弾力のある)でセキュリティを考慮したフォールトトレラントなアプリケーションのためのプロジェクトを、コマンドを1つ実行するだけ、10分足らずで用意できるのがJenkins Xだと言います。
この後、Jenkins Xに用意されたクイックスタートプロジェクトの1つを使って、実際にコマンド1つでプロジェクトを作成し、パイプライン、Gitリポジトリ、Webフック等必要なファイルや構造がすべて用意されるのを確認しました。あとは、「これまでも開発者が普通にやっている作業」を行っていくだけで、Jenkins Xの提供するプロセスに従ったCI/CDを実践できます。つまり、コードの修正を行い、プルリクエストを作成してコミットすれば、自動的にビルドとテストが行われ、専用のプレビュー環境で結果を確認できます。リポジトリにPRの承認コメントが追加されると、マスターへのマージとステージング環境へのデプロイが自動的に行われます。これは、Jenkins Xによって「最低1人の承認によってPRがマージされる」というルールがすでに設定されているためです。もちろん、承認を実行できるメンバーの指定など、ルールのカスタマイズが可能です。プロダクション環境へのデプロイは手動で行うよう定義されているので、コマンドを発行してリリースを実行します。バージョンのインクリメントも自動で行われ、リポジトリに記録されています。すべてがコードとしてリポジトリに記録されているため、トレーサビリティが確保され、前のバージョンに戻す(リバートする)ことも簡単です。
このセッションでは、Viktor Farcic 氏のユーモアを交えたデモンストレーションによって、「開発者がやるべきことに集中できるようにする」というJenkins Xの特長がわかりやすく提示されました。また、Jenkins Xのリソース消費や運用環境のパフォーマンスへの影響を心配する声に対して、従来のJenkinsの消費メモリがGB単位であるのに比較して、Jenkins Xの消費するメモリはビルド等が実行されているときでも100MB以内、必要がなくなれば自動的に破棄されるので問題にならないと、クラウドに最適化されたJenkins Xの優位性が示されました。
セッション 3: CloudBeesのJenkinsソリューション
最後のセッションでは、テクマトリックス株式会社 ソフトウェアエンジニアリング営業1部 次長の今村より、段階的なCI/CDへの取り組みの各段階において、TechMatrixが提供できるCloudBees社のJenkinsソリューションについてご説明いたしました。近日中に提供される予定の新しいトレーニングコース等についてもご紹介させていただきました。
質疑応答の中では、Jenkins Xプロジェクトの今後についても触れられました。さまざまなユースケースへの対応や、CLI/API優先のJenkins Xではあるが、ログ管理やプロジェクトの各環境を一覧できるダッシュボードなどの提供予定があること、カナリアデプロイメント、Blue-Green デプロイメント等のデプロイメントプラクティスに対応予定であるとのことで、今後ともますます便利に進化するJenkins Xから目が離せません。