こんにちは、テクマトリックスの米田です。
今回はタイトルの通り、代表的なCIツールの一つであるJenkinsをオフライン(インターネット接続なし)のWindows環境で構築してみました。構築するための手法や構築していく中で感じた注意点とその解決策をご紹介します。

なぜオフライン環境で構築するのか

機密性の高いデータを扱う開発環境を構築する際、組織の規約やセキュリティポリシーによっては、機密情報が外部に漏れるリスクを抑えるために、インターネット接続のないオフラインでの構築を求められる場合があります。このような要件を満たすためには、継続的インテグレーション(CI)を実行する環境も同様にオフラインの環境で構築する必要があります。

オフライン環境での構築方法

環境

  • OS:Windows Server 2022
  • Java:jdk-17.0.10.7
  • Jenkins:2.440.1

概要

Jenkinsを動作させるために必要なJavaやJenkinsインストーラのダウンロード、Jenkinsプラグインのインストールにはインターネット接続が必要なので、まずはオンラインの環境で構築を行います。オンライン環境での構築が完了した後、オフライン環境での構築に必要なファイルをオンライン環境からオフライン環境に移行して構築を行います。
Jenkinsの設定はJENKINS_HOME(デフォルトパスはC:\ProgramData\Jenkins\.jenkins)と呼ばれるフォルダに保存されています。JENKINS_HOMEの詳細はこちらをご確認ください。

詳細

今回のJenkinsの構築手順は以下のようになっています。

1. オンライン環境での構築

1-1:インターネット接続のできる環境を用意

各種インストールのためにインターネット接続のできるオンライン環境を用意します。

1-2:Javaのインストール

JenkinsはJavaの実行環境で動作するため、まずはJavaのインストールを行います。今回はJavaのインストールディレクトリをC:\Javaとします。

1-3:Jenkinsのインストール

Jenkins公式サイトからJenkinsインストーラ(jenkins.msi)をダウンロードし、Jenkinsのインストールを行います。

インストーラ実行時に設定するJavaのパスは、手順1-2で配置したJavaのインストールディレクトリにします(今回はC:\Java\jdk-17.0.10.7-hotspot\)。

Jenkinsのインストール後、初期設定を行うためにブラウザでhttp://localhost:<設定したポート番号>にアクセスします(Jenkinsのデフォルトのポート番号は8080)。アクセス後、Jenkinsのロックを解除するため、Administrator passwordに、C:\ProgramData\Jenkins\.jenkins\secrets\initialAdminPasswordのパスワードを入力します。

プラグインのインストールではInstall suggested pluginsを選択し、Jenkinsインストール時に推奨されているプラグインをインストールします。

Create First Admin Userでは管理者ユーザーのユーザー名やパスワード、メールアドレスを設定します。

最後にJenkinsにアクセスするURLを確認し、Jenkinsインストールの設定は終了です。

1-4:Jenkinsプラグインのインストール

ダッシュボード>Jenkinsの管理>PluginsのAvailable pluginsから所望のプラグインを選択してインストールします。

インストールしたプラグインはJENKINS_HOMEのpluginsディレクトリに格納されます。今回インストールしたBlue Oceanは、ブラウザのJenkinsのサイドバーにも表示されます。

1-5:ノードの設定

手順1-5は、次に行う手順1-6でオンライン環境でジョブが期待通り動作することを確認するために行う作業です。オンライン環境でのジョブの実行確認が不要な方はスキップしていただいて構いません。

Jenkinsの管理>ノードの管理>新規ノードの作成から新しいノードを作成し、必要な情報を登録します。今回はJenkinsコントローラと同じマシンにbuild-testノードを作成します。ノード設定用にC:\Jenkins_agent\build-testディレクトリを作成し、リモートFSルートに登録します。

登録後、コマンドプロンプトを開き、C:\Jenkins_agent\build-testのディレクトリで、Jenkinsコントローラーの「Run from agent command line」に表示されている起動コマンドを実行します。実行結果の最後に「Connected」と表示されていれば、ノードが正常に接続されていることを確認できます。Jenkinsの管理>ノードの管理を確認すると、作成したノードが接続されていることも確認できます。接続が成功していると、リモートFSルートに指定したディレクトリ内にファイルが生成されます。

1-6:ジョブの作成と実行

手順1-5をスキップした方はこの作業も不要です。
オンライン環境でジョブを作成し、実行確認をします。ここでジョブが期待通りの動作をするか、必要なプラグインが不足していないかを確認します。

1-7:移行ファイルの収集

オフライン環境へ移行するファイルを収集し、オンライン環境での構築は完了です。以下の3種類が必要なファイルです。

  • Javaのインストールディレクトリ(C:\Java)
  • Jenkinsインストーラ(jenkins.msi)
  • JENKINS_HOME

2. オフライン環境での構築

続いてソフトウェア開発をするためのオフライン環境でJenkinsの構築を行います。

2-1:各ファイルをオフライン環境へ移動

手順1-7で用意した3種類のファイルをオフライン環境に移行します。移行した3種類のファイルのうち、Javaのインストールディレクトリをオンライン環境と同じ配置にします。

2-2:Jenkinsのインストール

Jenkinsインストーラを起動し、インストールを行います。ポート番号やJavaディレクトリの選択など、ブラウザアクセス前に行う設定は、手順1-3と同様です。
Jenkinsのインストール完了後、オンライン環境で行ったブラウザアクセスによる初期設定は不要です。代わりにWindowsの「サービス」からJenkinsを停止し、Jenkinsをインストールしたことにより作成されたJENKINS_HOMEを、オンライン環境から移行してきたJENKINS_HOMEに差し替えます。差し替え後、Windowsの「サービス」からJenkinsを開始すると、ブラウザからJenkinsにアクセスした際に、オンライン環境でインストールしたプラグインなどが反映されているJenkinsが利用できる状態になっています。

2-3:ノードの設定

Jenkinsの管理>ノードの管理を開くと、オンライン環境で作成したbuild-testノードが登録されています。手順1-5と同様に、ノード設定用にC:\Jenkins_agent\build-testディレクトリを作成し、コマンドプロンプトでノード起動用コマンドを実行します。最後に接続確認も行います。

開発環境によってはJenkinsコントローラのURLの設定は、localhost以外の場合もあります。その場合、ノードからコントローラに接続する際には、JenkinsコントローラのURLをノード起動用コマンドに設定する必要があります。JenkinsコントローラのURLを変更するには、Jenkinsの管理>システムの管理>Jenkinsの位置にあるJenkins URLを所望のURLに変更します。この操作により、ノード起動用コマンドのURLも変更されます。

2-4:ジョブの実行

オフライン環境でもジョブが正常に動作するか確認します。手順1-6でジョブを作成していればオフライン環境でも同じジョブを使用することができます。手順1-6をスキップしてジョブを作成していない場合は、オフライン環境で新たにジョブを作成します。ジョブが期待通りに動作することが確認できれば、オフライン環境でのJenkinsの構築は完了です。

オフラインならではの注意点とその解決策

オフライン環境でJenkinsを構築しましたが、インターネットに接続できないためにいくつか注意すべき点があると感じました。

注意点1:プラグインのインストール

プラグインのインストールにはインターネット接続が必要なので、事前に運用方法を検討し、必要なプラグインを選択して過不足なくインストールする必要があります。

– 解決策 –

運用していくと新たにプラグインをインストールしたい場合があると思います。そこでオフライン環境のJenkinsに新たにプラグインをインストールする場合の解決策を以下に記載します。

  1. オンライン環境で必要なプラグインをインストールします。(インストールしたプラグインはhpi(またはjpi)ファイルとしてJENKINS_HOMEのpluginsディレクトリに格納されます。)
  2. オンライン環境でインストールしたプラグインのhpi(jpi)ファイルを、オフライン環境のJENKINS_HOMEのpluginsディレクトリに移行します。
  3. ブラウザでJenkinsにアクセスし、Jenkinsの管理>PluginsからAdvanced settingsを選択します。
  4. Deploy Pluginセクションでインストールしたいプラグインのhpi(jpi)ファイルを選択し、デプロイします。

これにより、オフライン環境で必要なプラグインを利用することができます。

注意点2:Jenkinsのバージョンアップ

JenkinsはLTS(Long Term Support)版のバージョンアップが、約12週に1度の頻度でリリースされます。新機能の利用やセキュリティの脆弱性修正などのために最新のバージョンにアップデートしたい方もいらっしゃると思いますが、Jenkinsをバージョンアップする場合にもインターネット接続が必要なため、オフライン環境ではJenkinsをバージョンアップすることができません。

– 解決策 –

オフライン環境でJenkinsを運用している場合のバージョンアップの解決策を記載します。以下の手順では、オフライン環境のJenkinsと同じバージョンのJenkinsがオンライン環境でも利用できることを前提としており、オンライン環境でバージョンアップの作業を行います。また、Jenkinsだけでなくインストール済みのプラグインもアップデートします。

  1. オフライン環境でWindowsの「サービス」からJenkinsを停止します。
  2. JENKINS_HOMEのバックアップを取得します。
  3. JENKINS_HOMEをオフライン環境からオンライン環境に移行します。
  4. オンライン環境でWindowsの「サービス」からJenkinsを開始します。
  5. Jenkinsの管理画面にバージョンアップのお知らせがあるので、クリックしてJenkinsをバージョンアップします。
  6. Jenkinsの管理>PluginsのUpdatesを選択し、右上の「Update」をクリックしてインストール済みのプラグインをアップデートします。
  7. ジョブを実行し、オンライン環境で問題なく動作することを確認します。
  8. オンライン環境でサービスを停止します。
  9. オンライン環境のJENKINS_HOMEとJenkinsインストールディレクトリのJenkins.warをオフライン環境に移行します。JENKINS_HOMEはバージョンアップ前と同じディレクトリに、Jenkins.warはインストールディレクトリにそれぞれ配置します。
  10. オフライン環境でJenkinsのサービスを開始します。
  11. Jenkinsの管理>Status Information>JenkinsについてでJenkinsがバージョンアップしていることと、ジョブを実行してオフライン環境で問題なく動作することを確認します。

以上でJenkinsとプラグインのバージョンアップは完了します。Jenkinsをバージョンアップすると以前のバージョンで使用していたプラグインが使えなくなる場合があるのでご注意ください。Jenkinsのバージョンアップに関する注意点と対策をまとめた記事もあるので、ぜひご活用ください。

まとめ

今回はJenkinsのオフライン環境での構築方法や注意点について紹介しました。オフライン環境ではJenkinsのバージョンアップやプラグインのバージョンアップに制約がありますが、ジョブの実行には制約はないので、構築後は通常通り使用することができます。CIにビルドツールやテストツールを組み込む際には、オンライン環境での準備や検討事項が増えるため、作業が煩雑になる可能性があります。テクマトリックスのソフトウェア開発基盤ソリューションチームでは、Jenkinsの構築だけでなく、SCMツールとの連携や、ビルドツールやテストツールと連携したCI/CDパイプラインの作成もサポートしていますので、ぜひご相談ください。

By yoneta