Help us understand the problem. What is going on with this article?

クラウド上での継続的なデプロイの流れを自動化する方法

本記事シリーズでは、Alibaba Cloud Container Serviceを利用したCI/CD(Continuous Integration and Deployment:継続的インテグレーションとデプロイメント)のライフサイクルを実装するための実践的なアプローチを紹介しています。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

1. 前提条件

ステップバイステップのガイドを通過する前に、ユーザーは以下の前提条件を持っている必要があります。

  • まともなコンピュータまたはラップトップ。
  • ウェブブラウザ、Google Chrome
  • 安定したインターネット接続
  • Alibaba Cloudアカウント
  • Linuxオペレーティングシステムの操作に関する基本的な知識。
  • DockerコンテナとDockerfileの使い方についての理解と基礎知識。
  • Kubernetesの基礎知識。
  • GitHubのアカウント。

2. リソース

このチュートリアルでは、サンプルアプリケーションのソースコードを含む多くのサードパーティのリソースを使用しています。GitHub のアプリケーションソースコードを提供してくれた Satya Depareddy さんに感謝します。

https://github.com/depareddy/java-webapp-docker

3. 序章

DevOpsシリーズの後編です。前回は、コンテナサービスとコンテナレジストリの自動化機能を利用したCI/CDパイプラインの設定について見てきました。本パートでは、Alibaba Cloud Container ServiceへのDockerイメージのデプロイと、クラウド上での継続的なデプロイの流れを自動化する手順を中心に紹介します。

4. コンテナサービスのセットアップ

コンテナクラスタを作成する前に、初めて利用する人のためにアクティベートしておく必要があるサービスがあります。クラウドリソースが有効化されていない場合は、Kubernetesクラスタの作成に進む前に有効化する必要があります。

4.1 Kubernetesクラスタを作成する

image.png

コンテナサービスコンソールに移動し、Kubernetesを選択して、Create Kubernetes Clusterボタンをクリックします。

Alibaba Cloud上で作成できるKubernetesクラスタには、4つの異なるエディションがあります。

  • Kubernetes - このエディションは、基盤となるインフラストラクチャを完全に制御できる標準のKubernetesクラスタです。マスターノードとワーカーノードを直接管理できます。
  • Managed Kubernetes - これは、マスターノードがAlibaba Cloudによって管理されているManaged Kubernetesで、マスターノードの健全性やスケーラビリティを心配する必要はありません。あなたが集中する必要があるのは、ワーカーノードを制御することだけです。
  • Multi-AZ Kubernetes - これは、異なるアベイラビリティゾーンにまたがるクラスタです。このオプションを選択すると、物理的なデータセンターの可用性に耐障害性が向上します。
  • Serverless Kubernetes (beta) - この記事を書いている時点で、このエディションは現在ベータ版です。このエディションでは、基盤となるインフラストラクチャリソースの最高レベルの抽象化を実現しています。開発者はアプリケーションのデプロイメントにのみ焦点を当て、インフラストラクチャの管理はクラウドサービスプロバイダに任せる必要があります。 このラボでは、標準のKubernetesクラスタを選択します。

image.png

Kubernetes Clusterの設定ページに移動し、Cluster Nameに名前を指定してから、任意のRegionとZoneを選択し、VPCは「Use Existing」を選択します。VPCにはvpc-devops、VSwitchにはvswitch-devopsを選択します。

VPCとVSwitchが作成されていない場合は、「Auto Create for VPC」を選択します。

image.png

マスタノードとワーカーノードの構成、インスタンスタイプ(推奨2コア、4G RAM、40GBウルトラディスク)を選択します。

マスターノードの場合、デフォルトではマスターノードは3台に固定されており、ワーカーノードの数は2台に設定する必要があります。

image.png

マスタークラスタのログオンパスワードを「Kubernetes@2019」または任意のパスワードに設定し、SSHでクラスタにログオンできるログオン方法を選択します。CloudMonitorのオプションをクリアすることで、クラスタ作成にかかる時間を短縮することができます。すべてデフォルトのままにしておきます。

image.png

作成ボタンをクリックして、Kubernetesクラスタを作成します。

image.png

クラスタ作成中であることが画面に表示されます。クラスタ作成中は大量のサービスが作成されますので、15分~20分程度は気長にお待ちください。作成状況はコンテナサービスコンソールで確認できます。以下に正常に作成されたサービスを示します。

image.png

上記のような画面が表示されれば正常にクラスタが作成されました。クラスタ一覧に戻るをクリックします。クラスタが起動している場合は、クラスタの状態を確認してください。

image.png

クラスタ名をクリックすると詳細情報が表示されます。

image.png

API サーバー インターネットのエンドポイント。Kubernetes APIサーバがインターネット向けのサービスを提供するために使用するサービスアドレスとポート。このサービスを経由してユーザー端末でkubectlなどのツールを利用してクラスタを管理することができます。

API Server イントラネットのエンドポイント。Kubernetes APIサーバーがイントラネット向けのサービスを提供するために使用するサービスアドレスとポートです。このIPアドレスは、バックエンドの3つのマスターノードがサービスを提供するServer Load Balancerのアドレスです。

マスターノードのSSH IPアドレスです。マスターノードにSSHで直接ログオンすることができ、クラスタの日常的なメンテナンスを容易にします。

サービスアクセスドメイン。クラスタ内のサービスをテストするために使用するドメイン名です。

5. コンテナレジストリの設定

5.1 GitHub アカウントの作成 (オプション)

GitHub のアカウントをお持ちでない場合は、www.github.com にアクセスして新しいアカウントを作成してください。ユーザー名、メールアドレス、パスワードを入力します。そして、確認後、無料アカウントを選択します。

image.png

登録が完了すると、メインのランディングページに移動します。

image.png

5.2 アプリケーションのソースコードをフォークする

この研究室では、GitHub をソースコードのリポジトリとして使用します。まず、既存の Git リポジトリからソースコードをフォークする必要があります: https://github.com/echoesian/java-webapp-docker これを行うには、自分の GitHub にログインし、このリポジトリに移動します https://github.com/echoesian/java-webapp-docker 画面右上のフォークをクリックします。

image.png

フォークが成功したら、自分のリポジトリにソースコードがあるはずです。

5.3 GitHubアカウントをコンテナレジストリにバインドする

Alibaba Cloudコンソールに移動し、ページ左上の「Home」をクリックし、「Container Registry」を選択します。

image.png

最初のログオン時に下図のようなプロンプトが表示されます。左上隅でマレーシア(クアラルンプール)またはその他の地域を選択し、OKをクリックします。

コードソースに移動し、アカウントのバインドをクリックします。

image.png

ポップアップダイアログで右矢印をクリックします。GitHub アカウントにサインインするための新しいリンクが開きます。

image.png

GitHubのサインインページで、ログイン情報を入力してサインインをクリックします。

image.png

Authrizationページで、"Authroize Aliyun Developer "をクリックします。

image.png

承認されると、通知メールが送られてくるはずです。コンテナ レジストリのページに戻ります。Account Bound ボタンをクリックします。

image.png

これで、GitHub のコードソースに "Bound" と表示されるようになったはずです。

image.png

5.4 ネームスペース

ネームスペースページに戻ります。defaut プロンプトで、[OK] をクリックします。

image.png

初めての場合は、Reset Docker Login Passwordをクリックします。

image.png

Dockerのログオンパスワードを[Aliyun-test]または[お好みのパスワード]に設定します。

image.png

ネームスペースとは、リポジトリの集合体です。企業や組織のリポジトリを1つのネームスペースにグループ化することをお勧めします。

  • ネームスペースとして会社名を使用します。
  • ネームスペースとしてチームや組織を使用する: misaka-team 次の図は、ネームスペースの一覧です。このラボでは、既存のネームスペース devops-workshop を使用します。

image.png

5.5 新規リポジトリの作成

下図のようにリポジトリを作成します。リージョンをマレーシア(クアラルンプール)など任意のリージョンに設定します。

image.png

次の図に従ってパラメータを設定し、[次へ] をクリックします。先ほど作成したネームスペースを選択します。

image.png

GitHubを選択し、アカウントユーザー名とプロジェクトを入力します。リポジトリの作成をクリックします。

image.png

下図は、リポジトリが作成されたことを示しています。

image.png

管理をクリックしてリポジトリを開きます。

このリポジトリに画像をプッシュするための詳細なコマンドが表示されます。

image.png

次の図に示す最初のコマンドをECSターミナルにコピーし、リポジトリのログオンパスワードを入力します。

image.png

5.6 Dockerイメージをコンテナレジストリにプッシュする

ターミナルのルートレベルで、アプリケーションのソースコードディレクトリに移動します。

$ cd java-webapp-docker

利用可能なdockerイメージを一覧表示します。

$ docker images

image.png

下図の 2 番目のコマンドを ECS 端末にコピーする(「ImageId」を実際のものに置き換え、「tag」を v1 に設定)。

image.png

image.png

下図の 3 番目のコマンドを ECS 端末にコピーします([tag]を v1 に設定)。

image.png

下図は画像をアップロードしているところです。

image.png

下図は、画像がアップロードされたことを示しています。

image.png

Alibaba Cloudコンソールに移動し、タグを選択します。アップロードされた画像が表示されます。

image.png

5.7 自動画像ビルドの設定

ビルドセクションに移動し、イメージを自動的にビルドするオプションを有効にします。

image.png

他の環境でのダウンロード方法については、リポジトリガイドを参照してください。

image.png

6. アプリケーションをコンテナサービスにデプロイする

6.1 Kubernetesクラスタへのアプリケーションの初期展開

Container Registryのページに移動し、先ほど作成したリポジトリの管理リンクをクリックします。

image.png

「アプリケーションのデプロイ」をクリックします。

image.png

プロンプトアップページで、「デプロイ」ボタンをクリックします。

image.png

コンテナサービスのページで、すべてのデフォルトのままにして、[次へ] をクリックします。

image.png

最新の画像バージョン(1.0)を選択し、「Always pull image」を有効にして「次へ」をクリックします。

image.png

[作成]をクリックします。

image.png

次のページでは「Create Success」と表示されるはずです。デプロイが成功したかどうかを確認します。

image.png

6.2 サービスの作成

ディスカバリー->ロードバランシングページ->サービスに移動します。作成をクリックして、アプリケーションのポートを公開する新しいサーバーロードバランサーを作成します。

image.png

image.png

サービス名を入力し、タイプは Service Load balancer と public を選択し、関連するコンテナアプリケーションを選択します。ポートマッピングでは、サービスポートとコンテナポートにそれぞれ 8080 を入力します。プロトコルはデフォルトでTCPにしておきます。

6.3 トリガーの作成

コンテナサービス→デプロイ

image.png

新しいトリガーを作成するには、トリガーセクションに移動し、「トリガーの作成」ボタンをクリックします。

image.png

ポップアップダイアログで、アクションとして「Redeploy」を選択します。確認をクリックします。

image.png

トリガーが作成されると、以下のようにURLリンクが表示されるはずです。このリンクをクリップボードにコピーして、後のセクションで使用できるようにしてください。

image.png

コンテナレジストリのページに戻り、トリガーセクションに移動します。右上の「作成」ボタンをクリックします。

image.png

ポップアップダイアログで、以下の詳細を入力し、先にコピーしたコンテナサービスのトリガーページからURLリンクを貼り付けます。

image.png

7. コンテナサービス上での継続的インテグレーションとデプロイメント

このラボでは、ソースコードリポジトリとしてGitHubを使用しています。ここでは、既存のタグにコード変更をコミットし、その変更をリモートのGitにプッシュします。

一般的に、コードコミットのワークフローは以下の通りです。

1) タグでブランチを作成する

    git branch {tagname}-branch {tagname}
    git checkout {tagname}-branch

2) 変更のみの場合は、修正を手動で行います。

    git add .
    git ci -m "Fix included"

3) ローカルでタグを削除して再作成

    git tag -d {tagname}
    git tag {tagname}

4) リモートでタグを削除して作り直します。

    git push origin :{tagname} // deletes original remote tag
    git push origin {tagname} // creates new remote tag

7.1 Gitをインストールする

$yum install -y git

image.png

7.2 ソースコードをローカルコンピュータにクローンする

次に、コードをローカルコンピュータにクローンする必要があります。それを行うには、ターミナルまたはコマンドプロンプトを開きます。以下のように入力してください。

$git clone https://github.com/echoesian/java-webapp-docker

image.png

コードが正常にクローン化された後。

7.3 新しいタグの作成

新しいタグを作成するには

$git tag release-v1.0

image.png

7.4 新規ブランチの作成

タグから新しいブランチを作成するには

$git branch release-v1.0-branch release-v1.0

image.png

7.5 ブランチからのコーデをチェックする

新しいブランチのソースコードをチェックアウト

$git checkout release-v1.0-branch

image.png

7.6 既存のソースコードの変更

プロジェクトのソースコードのホームディレクトリ - java-webapp-docker に移動します。ディレクトリを src/main/webapp に変更します。vi や vim などのエディタで index.jsp を開きます。ヘッダを変更します。

"Welcome to Alibaba Cloud DevOps v1.0"へ

<html>
<body>
<h1>Welcome to Alibaba Cloud DevOps v1.0</h1>
</body>
</html>

7.7 変更のコミットと新しいタグの作成

次のように入力して、コミットするファイルをGitに追加します。

$git add .

image.png

そして、コードをリポジトリにコミットします。

$git commit -m "changed header text"

image.png

タグの削除と再作成をリモートで行います。

$git push origin :release-v1.0

image.png

新しいタグを作成するには、以下のようにします。

$git push origin release-v1.0

image.png

リモートの GitHub 関数のクレデンシャルキャッシュを有効にします。

$ git config credential.helper store
$ git remote -v

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

7.8 自動ビルド

変更がGitHubのリモートリポジトリにプッシュされると、Alibaba Cloud Container Registryがトリガーされ、新しいイメージが自動的にビルドされているはずです。コンテナレジストリのページに移動してビルドし、ビルドのステータスを確認します。ステータスには「Successful」と表示されているはずです。

image.png

ビルドタスクのログを見ることができます。

image.png

ポップアップページ右上の更新をクリックすると、最新のログが表示されます。

image.png

コンテナ サービスに戻り、デプロイメント セクションに移動します。simplewebapp-default をクリックし、イベントセクションに移動します。デプロイメントジョブが以前のポッドをスケールダウンしていることに気づくでしょう、最新のイメージを引っ張り出し、新しいイメージをポッドにデプロイします。

image.png

履歴バージョンのセクションに行くと、最新バージョンがリストの一番上に表示されます。以前のバージョンにロールバックする必要がある場合は、バージョンの「ロールバック」リンクをクリックしてください。

image.png

ブラウザを開き、コンテキストパス/simplewebappでサービスアドレスをキー入力します。新しいサイトには「Welcome to Alibaba Cloud DevOps v1.0」と表示されているはずです。

image.png

URLアドレスはContainer Service -> Serviceページで確認できます。ExternalEndpointのラベルに外部IPアドレスが表示されます。

image.png

シリーズの次のパートでは、このチュートリアルではKubernetesのデプロイ戦略であるローリングアップデート、ブルーグリーンリリース、カナリアリリースを実行するように拡張していきます。ご期待ください。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

KentOhwada_AlibabaCloudJapan
こんにちは!アリババクラウドのKentです。日本でクラウドサービスを提供してまもなく4年。自分の勉強のため、海外のアリババに関するテックブログを翻訳しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away