💬

[Jenkins]とは?

2023/08/05に公開

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

Jenkinsを利用する目的であるCI/CDとは

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

CI/CDの違いとは

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

ジェンキンスの与える利点
開発中のプロジェクトではコミットは非常に頻繁に発生するため、コミット数だけビルドを実行するのではなく、ジョブがキューイングされて自分が実行される順番を待つことになる

コードの変更とともに行われるこのような自動化されたビルドとテスト作業は、次のような利点をもたらす。

プロジェクト標準コンパイル環境でのコンパイルエラーの検出
自動化テストの実行
静的コード分析によるコーディング規約遵守可否チェック
プロファイリング ツールを用いたソース変更による性能変化の監視
結合テスト環境への配布作業
この他にもジェンキンスは500種類以上のプラグインをオンラインで簡単にインストールできる機能を提供しており、パイソンのようなスクリプトを利用して簡単に自分に必要な機能を追加することもできる。

各種配置作業の簡略化

プロジェクト期間中、開発者は純粋な開発作業以外にDBセットアップや環境設定、Deploy作業のような単純作業に時間と労力をかける場合が多い。 データベースの構築、アプリケーションサーバーへのDeploy、ライブラリリリースのように以前CLIで実行されていた作業がジェンキンスのおかげでウェブインターフェースで簡単に可能になった。

Build自動化の確立

ビルドツールの場合、Javaはmavenとgradleが位置しており、すでにビルド管理ツールを利用してプロジェクトを進めているならジェンキンスを使わない理由は一つもない。 ジェンキンスと連動してビルド自動化を通じてプロジェクト進行の効率性を高めることができる。

自動化テスト

自動化テストはジェンキンスを使用しなければならない最大の理由の一つであり、事実上自動化テストが含まれていないビルドはCI自体が不可能だと見ても差し支えない。 ジェンキンスはSubversionやGitのようなバージョン管理システムと連動してコード変更を感知し自動化テストを行うため、もし個人がまだ実施できなかったテストがあっても心強い安全網になってくれる。 きちんとテストを経ていないコードをコミットすると、怒ったジェンキンスに出会うことになる。

コード標準コンプライアンスチェック

自動化テストと同様に、個人がまだ実施していないコード標準遵守可否の検査や静的分析によるコード品質検査をビルド内部で行うことで、技術的負債の減少にも大きく寄与する。

ビルドパイプライン構成

2つ以上のモジュールで構成されるレイヤーアーキテクチャが適用されたプロジェクトには、それに伴うビルドパイプライン構成が必要である。 例えば、ドメイン -> サービス -> UI のように各レイヤーの参照関係に応じて順次ビルドを進めなければならない。 ジェンキンスではこのようなビルドパイプラインの構成が簡単にでき、スクリプトを通じて非常に複雑な制御まで可能だ。

Discussion