Jenkinsとは、継続的インテグレーション(CI)や継続的デリバリー(CD)、
継続的デプロイメントを実現するためのツール
Jenkins(ジェンキンス) とは、継続的インテグレーション(CI)や継続的デリバリー(CD)、継続的デプロイメントを実現するツールです。
Jenkinsは、「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」といった目的とするオープンソースのツールです。現在、プロジェクトはLinux Foundationによって管理されています。 CI/CDツールはたくさんありますが、そのなかでも Jenkinsは、汎用性が高いことから大きな支持を得ています。170万ユーザー以上の導入実績があり、世界中のソフトウェアエンジニアによって開発された 1,800以上ものプラグインが利用可能なことが特長です。 Jenkinsは、Javaが動く環境であればLinuxでもWindowsでも動作させることができます。また、DockerやKubernetes上の動作もサポートされているため、コンピューターリソースをより効率的に利用することができるようになりました。プラグインが提供する機能だけでなく、スクリプトを記述することにより任意の処理を実行できるので、ビルドプロセスに合わせてビルドからリリースまで柔軟に自動化が行うことができます。
Jenkinsを利用する目的であるCI/CDとは
CI/CDとは、「ソフトウェアのリリーススピードの向上」を目的としたソフトウェア開発の手法で、頻繁にビルドやテストを実行することです。 一般的には、コードがバージョン管理ツールにコミットされたタイミングで、ビルドプロセスやリリースプロセスを自動実行するように構成します。 コミットされるたびに実行されるため、エラーがあればすぐにコミットした開発者にフィードバックされ、影響範囲の小さいうちにバグの発見と修正が可能となります。 この手法を適用することで、ソフトウェアは常にリリースできる状態となり、自動でプロセスが実行されるため人手によるミスや、操作のばらつきのようなものがなくなります。
CI/CDの違いとは
CIとCDの違いは、カバーするプロセスの範囲の違いとなります。コードレベルのテストまでを自動化するのがCI(継続的インテグレーション)で、システムテストやデプロイなど、実行環境やリリースまで影響するような自動化を行うのがCD(継続的デリバリー)です。
CI/CDを行うことで品質の向上と開発の効率化を同時に達成し、リリーススピードの向上に繋がります。
継続的インテグレーション(CI)
開発者が書いた新しいコードとマスターブランチ(トランク)を頻繁に統合するプロセスです。新しい機能開発のためにブランチを作成する場合、つぎにマージするまでの期間が長くなるにしたがって変更量が多くなり、マージ作業が大変になるだけでなく、問題が含まれるコードの特定と分離が難しくなります。一回のコミットでの変更量を小さくして頻繁にマージすれば、問題の発見が早くなり対処が楽になります。問題発見のオーバーヘッドを小さくするために自動化されたテストを行います。
継続的デリバリー(CD)
継続的インテグレーション(CI)を延長して、より高レベルの結合とテストなどを自動的に行い、新しい変更がリリース(本番環境へデプロイ)可能であることを保証するプロセスです。実際に行われることは開発プロジェクトによってまちまちですが、ソフトウェアのパッケージングや成果物リポジトリへの登録、テスト環境へのデプロイ、機能要件/非機能要件の充足を確認する包括的なテスト、監査やコンプライアンス準拠のための記録・エビデンス作成などが挙げられます。このプロセスを経た成果物はいつでも本番環境にデプロイすることができます。
継続的デプロイメント
継続的デリバリー(CD)プロセスをさらに延長して、リリース可能であることを保証されたソフトウェアを実際に本番環境にデプロイするプロセスです。このプロセスは特にWebアプリケーションをビジネス基盤とすることが多い、BtoCビジネスにおいて実践されることが多いでしょう。ソフトウェアを通して顧客に価値をいち早く届け、フィードバックを得る(改善につなげる)ことが重要だからです。このプロセスでは確実にデプロイが実行されるように配慮された実行環境のプロビジョニング、万が一のときにはアプリケーションをロールバックする自動化手法が用いられます。
今日の変化の早い社会においては、システムやサービスも素早く変化が必要になっています。そういった背景もあり、現在、継続的インテグレーション(CI)/継続的デリバリー(CD)の活用が広まっているのです。
Jenkinsの役割とは
Jenkinsのよくある誤解として、現在のビルドツールやテストツールを置き換えるものと考えられてしまうことがあります。Jenkinsの役割は、ビルドプロセスにあわせて、適切なツールを適切なタイミングで実行させることです。ビルドプロセスの各フェーズをシームレスに連携させ、結果を即座に通知することがJenkinsの役割です。最初はJenkinsサーバー上に全てのツールを準備して実行することが多いかもしれませんが、プロジェクトの規模が大きくなったり、チームの数が増えてくると、実行までに待ちができたり、実行時間が長くなってしまう可能性があります。
フィードバックをすぐに返すのが継続的インテグレーション(CI)・継続的デリバリー(CD)・継続的デプロイメントの基本なので、この状態の解消のためにJenkinsは分散ビルドの仕組みを持っています。Jenkinsサーバーにビルド実行用のマシンをエージェントとして登録することができ、Jenkinsサーバーは複数のエージェントに対してビルドの実行を割り振り、結果をフィードバックすることに注力します。JenkinsはCI/CDを支える強固な自動化基盤なのです。
Jenkins最大の武器:プラグインエコシステム
どうしてJenkinsは開発現場によって異なるツールやプロセスをカバーすることができるのでしょうか。それは世界中のソフトウェア開発者の手によるプラグインに支えられているからです。Jenkinsは大きく分けてコア機能とプラグインに分けられます。
コア機能はWebインタフェースはもちろん、ジョブ実行、分散ビルド(ノード/エージェント)管理、ユーザー管理などの基本機能を提供します。ジョブから実行される処理は、その内容に応じてユーザーが選択したプラグインを用いて、必要な情報(たとえばソースコードリポジトリやビルドパラメータ、デプロイ先の環境情報)を与えれば実行されるようになっています。開発プロセスが異なっても基本的にツールの使い方に大きな違いはありませんので、プラグインによって固有の設定を吸収することでスクリプトの記述量を減らし、誤りを防止できる利点があります。
プラグインの多くはJenkinsfileという形式のパイプライン定義に対応しているので、設定をソースコードと同じようにバージョン管理し、共有することが容易になっています。(前述の通り、任意のスクリプトを記述して実行できるので、プラグインがなくてもコマンドライン経由でほとんどの処理を記述できます。ただし、その記述は複雑になりがちです。)
2021年6月現在、Jenkinsプラグインの登録数は1,800を超えています(https://plugins.jenkins.io/)。Jenkinsが開発言語や環境、ワークフローが異なっても、世界中の開発現場で広く使われる理由はプラグインの豊富さにあります。プラグインを使えば社内で実績のある、あるいは使い慣れたツールを容易に自動化パイプラインに組み込むことができるので、既存のソフトウェア資産を活かせます。もちろん、世界中の開発者と同じように自分でプラグインを開発することも可能です。CI/CDツールやサービスを比較検討する際には、コア機能だけではなくプラグインを含めて自分の利用環境に合うかを確認するようにしましょう。
とはいえ、チームが使うべきプラグインはどれなのかと不安に思う必要はありません。Jenkinsをインストールする時に、よく使われるプラグインのセット(推奨プラグイン)を一括でインストールすることができますし、プラグイン管理機能によって、いつでも追加することができます。
オープンソースソフトウェア(OSS)ゆえの課題
Jenkinsはオープンソースのプロジェクトのため、だれでもすぐに利用し始めることができます。一方で、以下のような課題があるといわれています。
- ・書籍やwebから様々な情報を得られるが、自分たちの環境に適したやり方・設定を自分で判断する必要がある
- ・将来的な拡張や横展開などを考慮しないで構築をしてしまい、プロジェクトのサイロ化を招く可能性がある。
- ・サポートがないため、トラブル発生時には自力での調査・解決が必要。
このような課題に直面し、JenkinsによるCI/CDを始められていない、あるいはうまく活用できていないという現場は多いのではないでしょうか?
Jenkinsの導入をお考えの方へ
当社ではオープンソースであるJenkinsを有効活用していただくために、無料ウェビナーやトレーニングなどさまざまなサービスを提供しています。
今からでも間に合う!CI/CD、Jenkins入門 無料ウェビナー
これからCI/CDの導入を検討されている方にオススメの無料オンラインセミナーです。
CI/CDが必要になった背景や、CI/CDを実現するための前提知識となる「ソース管理システム」、「ソフトウェアテスト」に関する基礎知識を習得できます。
また、CI/CDツールのJenkinsの基本的な機能や具体的な利用例を、デモを通してご紹介します。
<こんな方におすすめです>
- ・CI/CDをこれから始めようとしている
- ・Jenkinsをこれから利用しようとしている
- ・CI/CD、Jenkinsを一から学び直したい
CI/CD導入検討やJenkins入門者におすすめのトレーニング
テクマトリックスでは、Jenkinsトレーニングを開催しています。Jenkinsをこれから利用する方、継続的インテグレーションの導入に取り組んでいる方、さらに、Jenkinsの知識を深めたい方に、オススメの各種トレーニングを開催しています。ぜひ、ご参加ください。
CI/CD環境構築サービス
CloudBees社によるJenkins認定資格を取得したエンジニアが貴社の環境に合わせて、Jenkinsのインストールからジョブの作成・保守を行います。
<内容>
- 1.OSS Jenkins のインストール:OSS Jenkinsのインストールおよび設定を行います。
- 2.ジョブの作成:プロジェクトにて実施しているビルドおよびテストを自動的に実行するジョブを作成します。
- 3.構築したCI環境の保守サポート(3ヶ月間):環境構築後、3ヶ月間の保守サービスを提供します。構築した環境に関するお問い合わせをメールにて対応します。
<環境構築イメージ>
Jenkins運用の問題を解決するのが、組織的に利用する「CloudBees CI」
テクマトリックスでは、組織的にJenkinsを利用するためのCloudBees CI (旧製品名:CoudBees Core)をご紹介しています。
CloudBees CIは、OSSのJenkinsを拡張した継続的インテグレーション/継続的デリバリーのプラットフォームです。Jenkinsの管理のしやすさとセキュリティを拡張するためのエンタープライズ機能を提供します。