Jenkins Xの基礎知識


Jenkins Xは、Kubernetes上のクラウドネイティブアプリケーション向けに自動化されたCI/CDを提供するオープンソースプロジェクトです。Jenkins Xの誕生から1年以上が経ち、Continuous Delivery Foundationの支援のもと、Jenkins Xへの関心が高まり、利用も増えているいま、開発者はJenkins Xテクノロジーとその機能についてさらに多くを知るようになってきています。
Jenkins Xを使用することで、ソフトウェア デリバリーのリリースを加速できる、インストールや設定が簡単になる、さらに長期的なビジネスの持続可能性が向上するなど、多くの利点があります。

このブログ記事では、Jenkins Xに関するよくある質問に回答し、なぜJenkins Xが重要なのかを説明します。

Jenkins Xとは

では、Jenkins Xとは何でしょう?CloudBeesのDistinguished EngineerでJenkins XのチーフアーキテクトであるJames Strachanの定義によれば、Jenkins Xとは、基盤となるインフラストラクチャをあまり気にすることなく「Kubernetesでネイティブに継続的デリバリーを行うためのオープンソースの定型的な方法」です。Jenkins Xは、Amazon、Azure、Google、IBM Cloud、OpenShift、Pivotalなど、主要なクラウドプラットフォームをすべてサポートしています。Jenkins XはJenkinsのサブプロジェクトで、自動化、ツールセット、DevOpsのベストプラクティスを活用して開発を加速し、CI/CDを改善します。
Jenkins Xを使用すると、複雑なエコシステムの設定に過剰な時間と労力を費やすことなくKubernetesを活用できます。Jenkins Xは複雑さを軽減し、操作や習得が容易なシステムの中で、適切に選択されたツールによるガイド付きアプローチを提供します。Jenkins Xは、プロジェクトの開始時に、構造の作成や必要なファイルの収集に多くの時間を費やす必要をなくします。Kubernetesクラスターが必要な場合は、インストールや設定を気にせず、自動ですべてのツールを使える状態にすることができます。Jenkins Xで1つのjxコマンドを実行するだけで、CDパイプラインの作成、Gitリポジトリの作成、Webフックの設定を行うことができます。Jenkins Xが行う処理のリストは膨大であり、日々増え続けています。

JenkinsとJenkins Xの違い

Jenkinsとは異なり、 Jenkins Xには決まったやり方があり、DockerやKubernetesなどのテクノロジーと連携することでより機能を発揮するように設計されています。とは言っても、やはりJenkinsとJenkins Xは密接に関連しており、JenkinsXでできることはすべて、2、3のプラグインや統合機能を使えばJenkinsで行うこともできます。しかし、Jenkins Xはすべてを簡略化します。Jenkins 2.0の機能を活用し、Helm、Draft、Monocular、ChartMuseum、Nexus、Docker Registryなどのオープンソースツールを使用してクラウドネイティブアプリケーションを簡単に構築できます。
実際、Jenkins XをJenkinsや他のCI/CDソリューションとは異なる特別なものにしているのは、そのようなツールとプロセスです。たとえば、Jenkins Xはプロセスを規定しますが、Jenkinsは好みや要件に合わせてどんなプロセスにも適応します。Jenkins XはCLI/API優位のアプローチを採用し、configuration as codeを基本とし、外部ツール(たとえば、Helm、Monocularなど)を取り入れます。いっぽう、JenkinsはUI優位のアプローチで、設定はUIを介して行われ、すべてが主に内部的なプラグインによって駆動されます。さらに、Jenkins XのPreview環境では、開発者はプルリクエストごとに実行システムを作成することによって、コードベースに統合された変更を共同で検証することができます。

Jenkins Xが生まれた理由

ソフトウェア開発プロセスはここ数年ですっかり変化し、さらに進化し続けています。DevOpsにより、アプリケーションおよび構成管理に対する開発者の責任は格段に大きくなりました。DevOpsが開発のスピードを上げ、ダウンタイムのリスクを減らすことを目的とするいっぽうで、開発者から運用担当者へという役割の移行は、開発者にとってスムーズなものではありませんでした。それにもかかわらず、DevOpsの受容は進み、採用も増えています。同時に、著しい変化が業界を席巻しました。

マイクロサービスアーキテクチャ:クラウドとそのデプロイメントモデル(パブリック、プライベート、ハイブリッド)があらゆる業界で採用される一方で、アプリケーションのデプロイメント、管理、更新の課題は未解決のままでした。このことが、マイクロサービスアーキテクチャの道を開きました。モノリシックなアプリケーションとは異なり、マイクロサービスによって構築されたアプリケーションは、独立してデプロイ可能かつスケーラブルな小規模ホストにデプロイできます。Amazon、eBay、PayPal、Netflixなどにならい、今日では、ほとんどの組織がアプリケーションをモノリシックなアーキテクチャからマイクロサービスアーキテクチャに移行しています。

コンテナエコシステム: OSの仮想化を提供するコンテナは、マイクロサービスに関連した問題のいくつかを解決してくれるということで普及してきました。現在、同一のホスト上の異なるコンテナに、異なるテクノロジーとフレームワークを使用して構築されたマイクロサービスをデプロイすることが可能です。これにより、開発者は自分が使い慣れている言語を使用し、コンテナ内に依存関係をパッケージ化することができます。また、コンテナはハードウェアのみを仮想化する仮想マシン(VM)よりも効率的です。コンテナへの移行において主導的な役割を果たしたDockerは、オープンソースコミュニティが多用するDockerhubパブリックリポジトリに、事前設定済みのDockerイメージの巨大なリポジトリを持っています。これらをはじめとした多くの利点により、コンテナはクラウド上にコードをデプロイする際のデフォルトの選択肢となっています。

Kubernetesの台頭:コンテナは物事を単純にしますが、課題がないわけではありません。実際、管理やオーケストレーションに関しては、VMと同様です。どのような組織にとっても、マシンが過少または過剰にプロビジョニングされていないこと、またメモリ、CPU、またはストレージにかかる費用が効果に見合ったものであることを確認するのは困難です。コンテナを(可能であれば自動的に)移動させ、演算の効率化と最適化を可能にするソリューションが必要とされていました。Googleはずっと前に、まさにそのための解決策を見出し、後にKubernetesという形でそれを発表しました。Kubernetesオープンソースソリューションは、コンテナのインストール、アップグレード、およびオーケストレーションを簡素化します。他のクラウドベンダーもコンテナをオーケストレーションするための独自のソリューションを提供していますが、Kubernetesはベンダーにとらわれず、あらゆる種類のクラウド、さらには社内インフラストラクチャにわたってコンテナを処理するための共通プラットフォームを提供します。

しかし、このような変化の結果、今日の開発者は、CI/CD用の多数のツールを含む細分化されたオープンソースエコシステムの中から選択を行わなければなりません。どのツールも問題の一部を解決するために開発されたものですが、適切なものを選ぶのは簡単ではありません。組織がCI/CDについて十分に理解し、効率的な一式を作り上げるまでには何年もかかることさえあります。開発者が実際の開発作業よりもCI/CD設定の微調整に多くの時間を費やさなければならいケースもよくあります。また、簡単にKubernetesクラスターを管理する方法がなく、本番環境のKubernetesを効果的に監視できないという懸念もあります。

JenkinsはKubernetesで既存のCI/CD設定を最大限に活用できるように手助けしますが、それでも、コードと連携して問題なく動作するプラグインの適切な組み合わせや設定を選択するのは容易ではありません。Kubernetes上でCDを実践する最良の方法について一致した見解はほとんどなく、多くのチームはJenkinsパイプラインをセットアップしたことがありません。

このような課題を端緒として、コミュニティはまだKubernetesを利用したことがないユーザーや、Kubernetesを利用してはいるがCI/CDに苦労しているユーザーのために、Jenkinsを利用してクラウドでCI/CDを自動化できるソリューションを検討し始めました。その検討結果が、最終的にJenkins Xプロジェクトという形に結実しました。

Jenkins Xの主な機能

Jenkins Xは開発者向けに、DevOpsのベストプラクティスに従ってコードをより迅速にデリバリーできるよう設計されています。プレビュー環境を提供し、DevExを使用してクラスター作成を簡素化し、さまざまなクラウドプロバイダーのクラスターで実行できるのはそのためです。Jenkins Xを使用する最大の利点の1つは、Kubernetes内部の知識が不要で、開発者がすぐにエコシステムを活用できるようになることです。特定の環境やワークフローに合わせて設定を変更する必要がある場合も、すべてがGitでバージョン管理されているため、基盤となるDockerfile、Jenkins Xパイプライン、Jenkinsfile、またはHelmチャートを微調整できます。Jenkins Xの機能のうち、話題となることが多いものをいくつか見てみましょう。

CIおよびCDの自動化: Jenkins Xは、洗練されたjxコマンドラインツールを提供します。これにより、Jenkins Xを既存または新規のKubernetesクラスター内にインストールし、プロジェクトをインポートし、新しいアプリケーションをブートストラップすることができます。また、Jenkins Xはプロジェクト用のパイプラインを自動的に作成します。

GitOpsによる環境プロモーション: Jenkins Xでは、Kubernetes Namespaceを使用して、開発用、ステージング用、および本番用など複数の仮想環境を作成できます。環境ごとに、固有の設定とGitリポジトリでバージョン管理されたアプリケーションおよび設定のリストがあります。これらの環境間での新しいバージョンのアプリケーションのプロモーションは、GitOpsのプラクティスに従って自動的に行われます。さらに、コードをある環境から別の環境に手動でプロモートしたり、必要に応じて新しい環境を変更または構成することもできます。

プレビュー環境:プレビュー環境は手動で作成できますが、Jenkins Xはプルリクエストごとにプレビュー環境を自動的に作成します。これにより、マージする前に変更の結果を確認できます。さらにJenkins Xは、チームメンバー向けにプレビューへのリンクを含むコメントをプルリクエストに追加します。

Jenkins Xの全機能の詳細については、こちらを参照してください。

Jenkins Xの利点トップ5

セットアップが簡単になる: Jenkins Xはさまざまな種類のプロジェクト用のビルドパックを提供し、外部ツール(Helm、Skaffold、Monocularなど)のインストール、設定、およびアップグレードを自動化し、開発者がたった1行のjxコマンドですばやく作業を開始できるようにします。そのうえで、開発者はいつでも必要な時に、自由にJenkins Xの内部構造を調べることができます。

分離:すべてのチームは、共有クラスター内または独自のクラスター内で、それぞれ独自のJenkins Xのインスタンスを実行します。共有クラスターでは、チームごとに固有のネームスペースを持ち、リソースを効果的に共有しながら、他のチームが使用しているものとは異なるパイプライン、フロー、および設定を持つことができます。個別のクラスターを使用すると、チームは固有のリソースセットを持ち、他のチームの作業負荷の影響を受けません。

より迅速: Jenkins Xを利用すると、デリバリーのロジスティクスによって遅らされることのないスムーズな開発を可能にします。強力なコマンドがほとんどのタスクを行い、クラウドやSCMとのシームレスな統合を実現します。たとえば、「jx create cluster gke」というシンプルなコマンド 1 つで、GoogleクラウドにJenkins Xをインストールできます。AWS(EKS)、Azure(AKS)、Oracle(OKE)なども使用できます。さらに、アプリケーションコードとともに、コンテナ、パッケージング、パイプラインなどに必要なすべてのファイルが共通のリポジトリに格納されており、すぐに使用できます。

より早い復旧: GitOpsではあらゆるものがバージョン管理され、すべてのプルリクエストにコメントがあるため、真の単一ソースを持つことができます。 Jenkins Xと環境の両方で configuration as codeを実現し、機能停止をより迅速に解消するための適切なコンテキストと追跡可能な情報を開発者に提供します。

確実なリリース: Jenkins Xでは、「jx create devpod」コマンドを使用して開発/テスト環境を作成し、各開発者がJenkins Xクラスター内に自分専用のサンドボックスを持つことができます。devbuildポッドは運用環境のパイプラインで使用されるものと同じであるため、コードは確実に予測可能な振る舞いをします。さらに、Jenkins Xは、コードが運用環境にプロモーションされる前にプレビュー環境を立ち上げるのを支援します。これらすべての機能は安定したコードをロールアウトするのに役立ちます。

CloudBeesは、開発者がJenkins Xを使い始めるのにどのように役立つか?

まずCloudBees Jenkins X Supportをサブスクライブし、初期セットアップを行って、Jenkins Xを最新の安定した互換性の問題のない状態に保つことから始めます。CloudBeesは、JenkinsとJenkins Xの両方に関して24時間365日のテクニカルサポートを提供しています。また、Jenkins認定エンジニアがどこよりも多く集まっている場所でもあります。James Rawlingによる動画で、Jenkins Xの詳細を学ぶこともできます。

 

その他のリソース

(この記事は、CloudBees社 Blog 「All You Need to Know About Jenkins X」2019年5月16日 Parker Ennis 投稿記事の翻訳です。)