🐡

自動デプロイ環境の構築④ Gitリポジトリへコミット後にJenkinsでデプロイさせる 10日目

2024/11/10に公開

はじめに

前回まで、自動デプロイ環境を構築するために、IISでデプロイ先であるステージング環境と本番環境のWEBサイトとGitリポジトリを作成し、Jenkinsをインストールしました。今回はGitにコミットした後に自動デプロイされる環境を構築します。ステージングのGitリポジトリにコミットした後、自動でステージングのWEBサイトにデプロイされるように設定します。

Jenkinsについて調べてみた

Jenkinsは、ソフトウェア開発の継続的インテグレーションおよび継続的デリバリー(CI/CD)を自動化するためのオープンソースツールです。Jenkinsは、ソフトウェアのビルド、テスト、デプロイプロセスを自動化し、開発者の効率向上とエラー削減に貢献します。

主な特徴

  • 自動化: Jenkinsは、定期的なビルドやテストの実行を自動化します。
  • 柔軟なプラグインシステム: 1,700以上のプラグインがあり、ビルドツールやテストツール、クラウドサービス、コンテナと統合できます。
  • 分散ビルド: Jenkinsは複数のエージェント(スレーブ)を使った分散ビルドに対応しており、大規模なプロジェクトにも適しています。

Jenkinsの基本機能

Jenkinsの基本機能は、CI/CDのワークフローを効率化するための機能です。

1 ビルド

コードのビルドを自動で行い、エラーがないかを確認します。

2 テスト

ビルドが完了した後に、ユニットテストや自動化されたテストを実行し、アプリケーションが期待通りに動作するか検証します。

3 デプロイ

テストが成功したら、テスト環境または本番環境にアプリケーションを自動デプロイします。

4 モニタリングとレポート

ジョブの実行状況や結果をダッシュボードで可視化し、問題の早期発見を可能にします。

Jenkinsのアーキテクチャ

1 マスターとエージェント(スレーブ)

  • マスター: Jenkinsのメインプロセスを管理し、ジョブのキューや監視、エージェントとの通信を担当します。
  • エージェント: マスターからの指示を受けて、ビルドやテストなどのジョブを実行するプロセスです。エージェントを活用することで、負荷分散や並列処理が可能になります。

Jenkinsによる自動デプロイ手順

この手順では、Gitリポジトリ helloworldapp-staging のコミットをトリガーに、ステージング環境へ自動デプロイする設定を行います。ステージング環境のWebサイトURLは http://localhost:5001/、デプロイ先ディレクトリは D:\works\staging\wwwroot\HelloWorldApp です。

手順全体

a. 必要なプラグインのインストール

  1. Jenkinsダッシュボードから「Jenkinsの管理」 > 「プラグインの管理」に移動します。
  2. 「利用可能」タブから以下のプラグインを検索してインストールします。
    • Git Plugin(Gitリポジトリのソースコード管理に必要)

b. Jenkinsでのジョブ設定

  1. 新規ジョブの作成
    Jenkinsダッシュボードで「新規ジョブ作成」をクリックし、ジョブ名に「HelloWorldApp Staging Deploy」などのわかりやすい名前を入力します。
    「フリースタイル・プロジェクト」を選択して「OK」をクリックします。

c. ソースコード管理の設定

  1. 「ソースコード管理」セクションで「Git」を選択します。
  2. リポジトリURLhelloworldapp-stagingのリポジトリURLを入力します。
    ※今回はローカルGitを対象としているので「file:///D:/works/HelloWorldApp/.git」といった感じで指定する
  3. 必要に応じて認証情報を設定します。
  4. ブランチ指定mainまたはstagingなど、対象のブランチに設定します。

d. ビルドトリガーの設定

  • SCMのポーリング
    「SCMのポーリング」にチェックを入れ、ポーリングの頻度を指定します。以下は5分ごとにGitリポジトリの変更をチェックする設定例です:
    H/5 * * * *
    

e. ビルド手順の設定

  1. 「ビルド」セクションで、「ビルド手順の追加」から「Windowsバッチコマンドの実行」を選択し、ASP.NET Coreアプリケーションをビルドして指定のディレクトリに出力します。

    dotnet publish D:\works\HelloWorldApp\HelloWorldApp.csproj -c Release -o D:\works\staging\wwwroot\HelloWorldApp
    
    
    • -c Release : リリースモードでビルド
    • -o D:\works\staging\wwwroot\HelloWorldApp : 出力ディレクトリの指定
  2. IISのリスタート設定(オプション)
    アプリケーションの更新を反映するために、IISを再起動するコマンドを追加します。再度「Windowsバッチコマンドの実行」を選択し、次のコマンドを入力します。

    iisreset
    

f. Jenkinsにローカルチェックアウトを許可

  1. Jenkinsの起動設定にシステムプロパティを追加(jenkins.xmlの追記)
  • Jenkinsのシステムプロパティに hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true を追加
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true -jar "D:\works\jenkins\jenkins.war" --httpPort=8080 --webroot="%ProgramData%\Jenkins\war"</arguments>

注意!! こちらの設定を-jarより手前に置かないとエラーになる

  1. 再起動
    http://localhost:8080/restart

g. 保存と動作確認

  1. 設定が完了したら「保存」をクリックします。
  2. Jenkinsジョブのダッシュボードで「ビルド実行」をクリックし、手動でジョブをトリガーします。
  3. ビルド結果を確認し、http://localhost:5001/にアクセスして正常にデプロイされたか確認します。


無事、ビルド成功してWEBサイトも起動されていました。動作確認問題ないですね。
(ちょっと苦労の後も残っちゃってますが。。。)

感想

ローカルGitとJenkinsを組み合わせるのはなかなか骨が折れる作業でした。ただ、技術者へのリハビリにはちょうど良い感じ。
次回はコードの可読性を担保するための工作をしたいと思う。

Discussion