Jenkinsとは?


Jenkinsとは、継続的インテグレーション(CI)や継続的デリバリー(CD)、
継続的デプロイメントを実現するためのツール

 

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(継続的インテグレーション)

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は開発現場によって異なるツールやプロセスをカバーすることができるのでしょうか。それは世界中のソフトウェア開発者の手によるプラグインに支えられているからです。Jenkinsは大きく分けてコア機能とプラグインに分けられます。

コア機能はWebインタフェースはもちろん、ジョブ実行、分散ビルド(ノード/エージェント)管理、ユーザー管理などの基本機能を提供します。ジョブから実行される処理は、その内容に応じてユーザーが選択したプラグインを用いて、必要な情報(たとえばソースコードリポジトリやビルドパラメータ、デプロイ先の環境情報)を与えれば実行されるようになっています。開発プロセスが異なっても基本的にツールの使い方に大きな違いはありませんので、プラグインによって固有の設定を吸収することでスクリプトの記述量を減らし、誤りを防止できる利点があります。

プラグインの多くはJenkinsfileという形式のパイプライン定義に対応しているので、設定をソースコードと同じようにバージョン管理し、共有することが容易になっています。(前述の通り、任意のスクリプトを記述して実行できるので、プラグインがなくてもコマンドライン経由でほとんどの処理を記述できます。ただし、その記述は複雑になりがちです。)

 

2021年6月現在、Jenkinsプラグインの登録数は1,800を超えています(https://plugins.jenkins.io/)。Jenkinsが開発言語や環境、ワークフローが異なっても、世界中の開発現場で広く使われる理由はプラグインの豊富さにあります。プラグインを使えば社内で実績のある、あるいは使い慣れたツールを容易に自動化パイプラインに組み込むことができるので、既存のソフトウェア資産を活かせます。もちろん、世界中の開発者と同じように自分でプラグインを開発することも可能です。CI/CDツールやサービスを比較検討する際には、コア機能だけではなくプラグインを含めて自分の利用環境に合うかを確認するようにしましょう。

とはいえ、チームが使うべきプラグインはどれなのかと不安に思う必要はありません。Jenkinsをインストールする時に、よく使われるプラグインのセット(推奨プラグイン)を一括でインストールすることができますし、プラグイン管理機能によって、いつでも追加することができます。

オープンソースソフトウェア(OSS)ゆえの導入の課題

Jenkinsはオープンソースのプロジェクトのため、だれでもすぐに利用し始めることができます。一方で、以下のような課題があるといわれています。

  • 書籍やwebから様々な情報を得られるが、自分たちの環境に適したやり方・設定を自分で判断する必要がある
  • 将来的な拡張や横展開などを考慮しないで構築をしてしまい、プロジェクトのサイロ化を招く可能性がある。
  • サポートがないため、トラブル発生時には自力での調査・解決が必要。

このような課題に直面し、JenkinsによるCI/CDを始められていない、あるいはうまく活用できていないという現場は多いのではないでしょうか?

>>Jenkinsのよくある課題とCloudBees CIによってできること


Jenkinsの導入をお考えの方へ

当社ではオープンソースであるJenkinsを有効活用していただくために、無料ウェビナーやトレーニングなどさまざまなサービスを提供しています。

CI/CD、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トレーニングを開催しています。Jenkinsをこれから利用する方、継続的インテグレーションの導入に取り組んでいる方、さらに、Jenkinsの知識を深めたい方に、オススメの各種トレーニングを開催しています。ぜひ、ご参加ください。

  • Jenkins管理 基礎
  • Jenkins パイプライン 基礎
  • Jenkins パイプライン 中級
  • Jenkins 3日間セットコース

CI/CD環境構築サービス

CI/CD環境構築サービス:エンタープライズ向け環境構築イメージ

継続的インテグレーション(CI)として、ビルドやテスト・解析ツールの導入および実行の設定、パイプラインの作成を実施し、テスト自動化環境を構築します。構築した環境の保守サポートや、CIツールであるJenkinsのテクニカルサポートを提供します。継続的デリバリー(CD)として、ビルド成果物の成果物リポジトリへの登録やデプロイのための設定を実施します。

<お客様の課題を解決>

  • ビルドプロセスの属人化やエラー時の対応の遅れを解決
  • 将来的に数百人規模の開発者が利用できるよう環境をスケール
  • SCMツールやチャットツールを本格的に導入

Jenkins運用の問題を解決するのが、組織的に利用する「CloudBees CI」

CloudBees CI

テクマトリックスでは、組織的にJenkinsを利用するためのCloudBees CI をご紹介しています。

CloudBees CIは、OSSのJenkinsを拡張した継続的インテグレーション/継続的デリバリーのプラットフォームです。Jenkinsの管理のしやすさとセキュリティを拡張するためのエンタープライズ機能を提供します。


CIの実現に向けて