私たちは、長年にわたるJenkinsの進化が、世界中の組織におけるDevOps文化の不可欠な部分になる過程を見てきました。多くのチームが絶え間なくコラボレーションし、プラグインという形でJenkinsオープンソースプロジェクトのために貢献してきました。それにもかかわらず、 DevOpsのベストプラクティスを採用し、プラグインを多用するJenkins環境に慣れることは、開発者にとって必ずしも容易ではありません。
このような状況を受けて、Kubernetes上でクラウドネイティブアプリケーションのCI/CDを実現する際の複雑さを軽減することを目的として、1年あまり前にJenkinsのサブプロジェクトとして提案されたのがJenkins Xです。このブログ記事では、 Jenkins X: Continuous Delivery for Kubernetesウェビナーで紹介したJenkins Xの機能について説明します。
GitOpsによる環境のプロモーション
Jenkins XはGitOpsの手法でGitリポジトリの環境とアプリケーションバージョンを設定および管理します。ソース管理システムとしてGitを使用する利点については、すでにあちこちで説明され、十分に確立されているため、ここでは簡単なオープンソースのデモであるCroc Hunterをサンプルとして、Jenkins XがどのようにGitOpsを活用するかを説明します。次の図は、このアプリケーションのGitHubリポジトリのスクリーンショットです。
Jenkins Xは、すぐに使えるステージングおよびプロダクション環境を作成します。次の図は、ステージング環境でのCroc Hunterの見え方です。
このアプリケーションでは好きなだけレーザーでワニを撃つことができます。画面の下部に、Kubernetesクラスターのポッドホスト名とリージョン、リリースバージョン、コミットIDが表示されています。アプリケーションは、プロダクション環境の別のKubernetesクラスターでも同じように実行されます。
GitHubを利用した典型的な開発フローを可能にするために、Jenkins XはKubernetesエコシステムのいくつかのオープンソースプロジェクトを利用してGitOpsを実装します。環境ごとに個別のGitリポジトリが必要です。この例では、Gitリポジトリでちょっとした変更を行い、レーザーを魚に変えています。
コードに必要な変更を加えたら、新しいブランチを作成する必要があります。ブランチに「No lasers」という名前を付け、GitHubからPRを送信しましょう。
PRを送信するとすぐに、Jenkins XはサーバーレスJenkinsでビルドプロセスを開始します。(そうです!Jenkins Xは従来のJenkinsマスターとサーバーレスのJenkinsの両方を実行できるのです。サーバーレス Jenkinsでは、ビルドのたびに、ビルドを処理している間だけ実行されるコンテナが起動されます)その後、次の図のように、PRのビルドプロセスのステータスが表示されます。興味があれば、Kubernetesコンソールから、舞台裏で何が起こっているのかを確認してみるとよいでしょう。
ボットと対話して、PRの承認、ユーザーの割り当て、テストの再実行などのタスクを実行できます。
プロセスが正常に完了すると、ボットはビルドされたPRをJenkins Xのプレビュー環境で確認するよう促します。
プレビュー環境では、変更が成功したかどうかを確認できます。今回、船は意図したとおりにレーザーの代わりに魚を撃ち出すようになりました。
あとは、リポジトリに戻ってコメント「/Approve」を追加するだけです。このコメントは、ボットにマージ要求の承認を指示するためにあらかじめ設定されたものです。
ボットが自動的にPRをマスターとマージするので、ブランチを削除してかまいません。
PRは自動的にステージング環境にプロモートされます。次のとおり、ステージングに新しいバージョン0.0.131が表示されており、さきほどと同様に変更を確認できます。
これまで見てきたように、Jenkins Xはコンテナ化されたアプリケーションをリリースするパイプラインの設定を自動化します。これにより、ユーザーはGitHub上で変更を行い、PRを作成してコミットし、サーバーレスのJenkins上で自動的にPRのコードを実行することが可能になります。さらに、Jenkins XはPRをビルドし、ステージングまたはプロダクションにデプロイする前にプレビュー環境を提供します。PRを承認すると、自動的にマスターにマージされ、ステージング環境へのデプロイメントが開始されます。
以下では、Jenkins Xを特別なものにしている他の要素を見ていきます。
DevPod
Jenkins Xは変更要求、テスト、CI/CD、監査、ロールアウト、モニタリングを容易にするだけでなく、開発作業にも大いに役立ちます。Jenkins XはクラウドのKubernetesクラスターの中に開発環境を作成することを可能にします。
既存のプロジェクトがある場合は、たった1行のコマンドを実行するだけでDevPod (クラウドのKubernetesクラスターを利用した開発環境)を作成できます。
jx create devpod —sync
このコマンドはプロジェクトの種類を検出し、すべてのツールがプレインストールされた状態でDevPodを作成します。変更をDevPodに同期するには、次のコマンドを使用します。
jx sync
クイックスタート
Jenkins Xには、一からアプリケーションを作成しないで済むよう、クイックスタートアプリケーションのリストが付属しています。プロジェクトをクイックスタートするには、次のコマンドを使用します。
jx create quickstart
このコマンドを実行すると、クイックスタートのリストが表示され、言語を選択してプロジェクトに名前を付けるように求められます。ステップを完了すると、Jenkins Xはクイックスタートを基にして自動的に新しいアプリケーションをサブディレクトリに作成します。Gitリポジトリを初期化し、ソースコードを追加します。さらに、Dockerfile、Jenkinsfile、Helmチャートなど、最初のパイプラインの実行を開始するために必要なすべてのものを作成します。これにより、新しいプロジェクトを開始するプロセスが大幅にスピードアップします。
既存のプロジェクトをJenkins Xにインポートすると、パイプラインの作成も自動的に行われます。
今後のロードマップ
Jenkins Xがユーザー、開発者、そしてオープンソースコミュニティに役立つ機能を追加し続けていることは特筆に価します。今後登場する機能の1つに、Jenkins Xによるプログレッシブデリバリーがあります。プログレッシブデリバリーには、カナリア デプロイメントなどが含まれます。カナリア デプロイメントとは、新しいバージョンのソフトウェアが一部のユーザーにロールアウトされ、そのパフォーマンスに基づいて徐々に拡張またはロールバックされる手法を指します。また、プロセス全体の自動化への取り組みも進行中です。このような機能についてもっと知りたい場合は、Jenkins X ロードマップページにアクセスしてください。
その他のリソース
- Jenkins XにおいてContinuous Delivery Foundationが重要である理由
- Jenkins Xの機能の詳細
- Jenkins Xのブレーンが語ったポッドキャストを聴く
- 継続的デリバリーの実装に関するウェビナーを見る
Carlos Sanchezのブログ
(この記事は、CloudBees社 Blog 「How Jenkins X Accelerates CI/CD」2019年5月7日 Carlos Sanchez投稿記事の翻訳です。)