0Pricing
DevOps Bootcamp · レッスン

Jenkinsによるデプロイの自動化

JenkinsでCI/CDパイプラインを作成し、Dockerコンテナを対象環境にデプロイします。

「Jenkinsによるデプロイの自動化」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

自動デプロイの概要

JenkinsとDockerを使ったCI/CDの最後のレッスンへようこそ。今日は、Dockerコンテナのデプロイを自動化する方法に注目します。

自動デプロイとは、手動で操作することなく、ソフトウェアを本番環境またはステージング環境にリリースするプロセスです。これは継続的デリバリーと継続的デプロイメントの重要な要素であり、速度、一貫性、信頼性を確保します。

Jenkinsによるデプロイの自動化 — イラスト1

デプロイを自動化する理由

アプリケーションを手動でデプロイすると、時間がかかり、エラーが発生しやすく、結果も一貫しない場合があります。自動化によって、こうした課題に対処できます。

  • 速度:新機能や修正をすばやくデプロイできます。
  • 信頼性:標準化されたプロセスによって人的ミスを減らせます。
  • 一貫性:すべてのデプロイで同じ手順を確実に実行できます。
  • 効率:開発者がデプロイ作業ではなくコーディングに集中できるようになります。

デプロイパイプラインのステージ

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Jenkins入門
  2. JenkinsによるDockerイメージのビルド
  3. Jenkinsによるデプロイの自動化
  4. JenkinsfileによるJenkins Pipeline as Code
← DevOps Bootcampに戻る