Jenkinsによるデプロイの自動化
JenkinsでCI/CDパイプラインを作成し、Dockerコンテナを対象環境にデプロイします。
「Jenkinsによるデプロイの自動化」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
自動デプロイの概要
JenkinsとDockerを使ったCI/CDの最後のレッスンへようこそ。今日は、Dockerコンテナのデプロイを自動化する方法に注目します。
自動デプロイとは、手動で操作することなく、ソフトウェアを本番環境またはステージング環境にリリースするプロセスです。これは継続的デリバリーと継続的デプロイメントの重要な要素であり、速度、一貫性、信頼性を確保します。

デプロイを自動化する理由
アプリケーションを手動でデプロイすると、時間がかかり、エラーが発生しやすく、結果も一貫しない場合があります。自動化によって、こうした課題に対処できます。
- 速度:新機能や修正をすばやくデプロイできます。
- 信頼性:標準化されたプロセスによって人的ミスを減らせます。
- 一貫性:すべてのデプロイで同じ手順を確実に実行できます。
- 効率:開発者がデプロイ作業ではなくコーディングに集中できるようになります。
デプロイパイプラインのステージ
Dockerデプロイ用の一般的なJenkinsパイプラインには、次の主要なステージがあります。
- Build:Dockerイメージをビルドします(前のレッスンで説明しました)。
- Test:イメージに対して自動テストを実行します。
- Push:イメージをDockerレジストリにプッシュします。
- Deploy:レジストリからイメージを取得し、対象サーバーで実行します。
- Verify:新しいデプロイが正常に動作していることを確認します。
今日は「Deploy」ステージと「Verify」ステージに注目します。
対象環境のセットアップ
Jenkinsがデプロイを実行する前に、対象サーバーを準備しておく必要があります。通常、次の準備が必要です。
- Dockerのインストール:対象サーバーにDocker Engineがインストールされている必要があります。
- SSHアクセス:Jenkinsが対象サーバーに安全なSecure Shell(SSH)アクセスで接続できる必要があります。
- ユーザー権限:SSHユーザーにDockerコマンドを実行する権限が必要です。
通常、SSH認証情報はJenkins内で安全に管理します。
SSH用のJenkins認証情報
リモートサーバーに接続するため、JenkinsはSSH認証情報を使用します。通常、これらはSSHのユーザー名と秘密鍵のペアとして、Jenkinsの認証情報マネージャーに安全に保存されます。
パイプラインを定義するとき、特定のステージでこれらの認証情報を使用するようJenkinsに指定できます。これにより、対象サーバー上でコマンドを実行できるようになります。
基本的なデプロイスクリプトの例
これは、対象サーバー上で実行してDockerコンテナを更新する、シンプルなシェルスクリプトです。古いコンテナを停止して削除し、新しいイメージを取得して実行します。
APP_NAMEとIMAGE_NAMEは環境変数として渡されます。
#!/bin/bash
# Stop and remove existing container
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
# Pull the new Docker image
docker pull ${IMAGE_NAME}
# Run the new container
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment of ${APP_NAME} complete!"Jenkinsパイプラインとの統合
Jenkinsfileでは、sshPublisherプラグイン、またはSSHエージェント転送を使用する単純なshステップによって、リモートホスト上でコマンドを実行できます。SSHが設定済みであることを前提に、基本的なshステップを使ったデプロイステージは次のようになります。
agent { label 'remote-deploy-host' }は、このステージが対象サーバー上で実行されることを意味します。
stage('Deploy to Production') {
agent { label 'remote-deploy-host' }
steps {
withEnv([
"APP_NAME=my-webapp",
"IMAGE_NAME=myregistry/my-webapp:latest"
]) {
sh '''
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
docker pull ${IMAGE_NAME}
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment successful!"
'''
}
}
}ローリングアップデートの実現
ダウンタイムなしでデプロイするには、単純な停止と起動だけでは不十分です。通常は、次のような戦略を使用します。
- ローリングアップデート:サービスを利用可能な状態に保ちながら、古いコンテナを新しいコンテナに1つずつ段階的に置き換えます。
- Blue/Greenデプロイメント:新しいバージョン(Green)を古いバージョン(Blue)と並行してデプロイし、その後トラフィックを切り替えます。
Jenkinsでもこれらをオーケストレーションできますが、Docker SwarmやKubernetesなどのツールは、より高度な戦略を標準でサポートしています。
デプロイの検証
デプロイ後は、アプリケーションが正しく動作していることを確認することが重要です。確認には、次のような方法があります。
- ヘルスチェック:アプリケーションのヘルスエンドポイントに対して、単純なHTTP GETリクエストを送信します。
- ログ監視:コンテナのログを確認して、エラーがないか調べます。
- 統合テスト:新しくデプロイしたバージョンに対して、簡単な一連のテストを実行します。
Jenkinsパイプラインに「Verify」ステージを含めて、これらの確認を自動化できます。
理解度を確認
次のデプロイステージのJenkinsfileスニペットについて考えてみましょう。docker stop ${APP_NAME} || trueの主な目的は何でしょうか。
まとめ:自動デプロイ
よくできました。JenkinsとDockerを使った自動デプロイの進め方を学びました。
- 自動デプロイにより、迅速で信頼性が高く、一貫したリリースを実現できます。
- 対象環境にはDockerとSSHアクセスが必要です。
- Jenkinsは安全な認証情報を使用してリモートサーバーに接続します。
- デプロイスクリプトでは通常、古いコンテナを停止し、新しいイメージを取得して、新しいコンテナを起動します。
- デプロイが正常に完了したことを確認するには、検証ステップが重要です。
これでJenkinsとDockerを使ったCI/CDコースは終了です。これらの強力なツールを使いこなせるよう、練習を続けてください。
よくある質問
「Jenkinsによるデプロイの自動化」レッスンは無料ですか?
はい。「Jenkinsによるデプロイの自動化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Jenkinsによるデプロイの自動化」で何を学びますか?
JenkinsでCI/CDパイプラインを作成し、Dockerコンテナを対象環境にデプロイします。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Jenkinsによるデプロイの自動化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Jenkins入門
- JenkinsによるDockerイメージのビルド
- Jenkinsによるデプロイの自動化
- JenkinsfileによるJenkins Pipeline as Code