自動デプロイ環境の構築④ Gitリポジトリへコミット後にJenkinsでデプロイさせる 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. 必要なプラグインのインストール
- Jenkinsダッシュボードから「Jenkinsの管理」 > 「プラグインの管理」に移動します。
- 「利用可能」タブから以下のプラグインを検索してインストールします。
- Git Plugin(Gitリポジトリのソースコード管理に必要)
b. Jenkinsでのジョブ設定
- 新規ジョブの作成
Jenkinsダッシュボードで「新規ジョブ作成」をクリックし、ジョブ名に「HelloWorldApp Staging Deploy」などのわかりやすい名前を入力します。
「フリースタイル・プロジェクト」を選択して「OK」をクリックします。
c. ソースコード管理の設定
- 「ソースコード管理」セクションで「Git」を選択します。
-
リポジトリURLに
helloworldapp-staging
のリポジトリURLを入力します。
※今回はローカルGitを対象としているので「file:///D:/works/HelloWorldApp/.git」といった感じで指定する - 必要に応じて認証情報を設定します。
-
ブランチ指定を
main
またはstaging
など、対象のブランチに設定します。
d. ビルドトリガーの設定
-
SCMのポーリング
「SCMのポーリング」にチェックを入れ、ポーリングの頻度を指定します。以下は5分ごとにGitリポジトリの変更をチェックする設定例です:H/5 * * * *
e. ビルド手順の設定
-
「ビルド」セクションで、「ビルド手順の追加」から「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
: 出力ディレクトリの指定
-
-
IISのリスタート設定(オプション)
アプリケーションの更新を反映するために、IISを再起動するコマンドを追加します。再度「Windowsバッチコマンドの実行」を選択し、次のコマンドを入力します。iisreset
f. Jenkinsにローカルチェックアウトを許可
- 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より手前に置かないとエラーになる
- 再起動
http://localhost:8080/restart
g. 保存と動作確認
- 設定が完了したら「保存」をクリックします。
- Jenkinsジョブのダッシュボードで「ビルド実行」をクリックし、手動でジョブをトリガーします。
- ビルド結果を確認し、
http://localhost:5001/
にアクセスして正常にデプロイされたか確認します。
無事、ビルド成功してWEBサイトも起動されていました。動作確認問題ないですね。
(ちょっと苦労の後も残っちゃってますが。。。)
感想
ローカルGitとJenkinsを組み合わせるのはなかなか骨が折れる作業でした。ただ、技術者へのリハビリにはちょうど良い感じ。
次回はコードの可読性を担保するための工作をしたいと思う。
Discussion