Jenkinsとは


Jenkinsとは?

Jenkinsとは | テクマトリックス株式会社

Jenkinsとは、継続的インテグレーション(CI)/継続的デリバリー(CD)実現のためのツール

Jenkins(ジェンキンス)とは、継続的インテグレーション(CI)や継続的デリバリー(CD)を実現のためのツールです。
Jenkinsは、「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」といった利用目的として、注目がされているオープンソースのツールです。
テクマトリックスでは、組織的にJenkinsを利用するためのCloudBees Jenkins Solutionsをご紹介しております。

Jenkinsを利用する目的

Jenkinsを利用する目的はCIやCDの実現となります。

CI/CDとは「ソフトウェアのリリーススピードの向上」を目的としたソフトウェア開発の手法で、頻繁にビルドやテストを実行することです。一般的には、コードがバージョン管理ツールにコミットされたタイミングで、ビルドプロセスやリリースプロセスを自動実行するように構成します。
コミットされるたびに実行されるため、エラーがあればすぐにコミットした開発者にフィードバックされ、影響範囲の小さいうちにバグの発見と修正が可能となります。
この手法を適用することで、ソフトウェアは常にリリースできる状態となり、自動でプロセスが実行されるため人手によるミスや、操作のばらつきのようなものがなくなります。

このように、CIやCDを行うことで品質の向上と開発の効率化を同時に達成し、リリーススピードの向上に繋がります。
CIとCDの違いは、カバーするプロセスの範囲の違いとなります。コードレベルのテストまでを自動化するのがCIで、システムテストやデプロイなど、実行環境やリリースまで影響するような自動化を行うのがCDです。

また、CI/CDはリリーススピードを向上させるということは、素早く変化が可能ということであり、変化に対して柔軟になります。今日の変化の早い社会においては、システムやサービスも素早く変化が必要になっています。そういった背景もあり、現在CI/CDの活用が広まっているのです。

CIがCDのように範囲が拡張したことには、文化的な理由と技術的な理由があります。文化的には、DevOpsの考え方が広がったことで、これまで開発チームに閉じたプロセスのみを自動化していたところから、ソフトウェアの価値をより早くユーザーへ届けるために、運用や品質保証チームまで広がる範囲が連携しするようになりました。技術的には、Dockerなど、実行環境をコードとして管理できる技術が普及したことから、デプロイやシステムテストといったコードだけではなく、実行環境も必要となるプロセスまで自動化できるようになったことが理由です。

このように、CI/CDを行うためには自動化が必須となり、自動化のためのツールとして広く利用されています。

Jenkinsの特長

CI/CDを行えるツールはたくさんありますが、JenkinsはシェアNo.1のツールとなっています。大きな長所としては、汎用性が高いことと大きなコミュニティの存在です。
Jenkinsは汎用性が高く、基本的にJavaが動く環境であればLinuxでもWindowsでも動作させることができます。また、ビルドやテストに限らずどんなスクリプトでも実行することができるので、ビルドプロセスに合わせてビルドからリリースまで柔軟に自動化が行うことができます。

コミュニティが大きいことから、プラグインも豊富にあり、1300以上のプラグインを利用することができます。利用者が多いため、日本でも勉強会が開かれていたり、日本語の情報がすぐに手に入るのも広く使われている要因です。

Jenkinsの役割

Jenkinsのよくある誤解として、現在のビルドツールやテストツールを置き換えるものと考えられてしまうことがあります。Jenkinsの役割はビルドプロセスにあわせて、適切なツールを適切なタイミングで実行させることです。ビルドプロセスの各フェーズをシームレスに連携させ、結果を即座に通知することがJenkinsの役割となります。また、最初はJenkinsサーバー上に全てのツールを準備して実行することが多いかもしれませんが、プロジェクトの規模が大きくなったり、利用するプロジェクトの数が増えてくると、実行されるまでに待ちができたり、実行時間が長くなってしまう可能性があります。コードにエラーがあればすぐに通知するのがCI/CDの基本なので、この状態の解消のためにJenkinsには分散ビルドの仕組みがあります。ビルド実行用のマシンをエージェントとして登録することができ、Jenkins本体はエージェントに対してマスターと呼びます。マスターは複数のエージェントに対してビルドの実行を割り振り、結果をまとめることに注力させ、基本的にはビルドの実行はマスター上では行わないことが推奨されています。

以下は構成例です。