このトピックでは、toolkit-maven-plugin プラグインを使用して、Enterprise Distributed Application Service (EDAS) にデプロイされている Spring Cloud、Dubbo、または High-speed Service Framework (HSF) アプリケーションの段階的リリースを実装する方法について説明します。
自動デプロイ
toolkit-maven-plugin を使用してアプリケーションのデプロイを自動化するには、プラグインの依存関係を追加し、プラグインを構成し、デプロイジョブをビルドします。
- プラグイン依存関係を追加します。
pom.xml ファイルに次のプラグイン依存関係を追加します。
<build> <plugins> <plugin> <groupId>com.alibaba.cloud</groupId>説明 最新の toolkit-maven-plugin バージョンを使用することをお勧めします。 - プラグインを構成します。
プラグインの構成には、アカウント構成、パッケージ構成、およびデプロイ構成が含まれます。より詳細なカスタム構成項目については、パッケージパラメータを指定する および デプロイパラメータを指定する をご参照ください。
- アカウント構成を完了します。
パッケージ化されたプロジェクトのルートディレクトリに、
YAML形式のアカウント構成ファイルを作成します。ファイル名をtoolkit_profile.yamlにし、以下の情報をファイルに追加します。regionId: # アプリケーションがデプロイされるリージョン。たとえば、値 cn-beijing は中国 (北京) リージョン、値 cn-shanghai は中国 (上海) リージョン、値 cn-hangzhou は中国 (杭州) リージョンを示します。 jarPath: # デプロイパッケージのパス。このパラメータを指定する場合、Maven でアプリケーションファイルをパッケージ化する必要はありません。指定されたパスにあるパッケージを使用してアプリケーションがデプロイされます。絶対パスまたは相対パスを指定できます。 accessKeyId: # Alibaba Cloud リソースへのアクセスに使用する AccessKey ID。セキュリティリスクを軽減するために、Resource Access Management (RAM) ユーザーの AccessKey ID を使用することをお勧めします。 accessKeySecret: # Alibaba Cloud リソースへのアクセスに使用する AccessKey シークレット。セキュリティリスクを軽減するために、RAM ユーザーの AccessKey シークレットを使用することをお勧めします。 - パッケージ構成を完了します。
パッケージ化されたプロジェクトのルートディレクトリに、
YAML形式のパッケージ構成ファイルを作成します。パッケージ化されたプロジェクトが Maven サブモジュール用に作成されている場合は、サブモジュールのディレクトリにファイルを作成します。ファイル名をtoolkit_package.yamlにし、以下の情報をファイルに追加します。apiVersion: V1 kind: AppPackage spec: packageType: # アプリケーションデプロイパッケージのタイプ。有効な値は、War、FatJar、Image、および url です。 packageUrl: # パッケージの URL。 packageType パラメータを url に設定した場合、このパラメータをアプリケーションのデプロイに使用するパッケージのアドレスに設定できます。このパラメータを空のままにすると、現在の Maven ビルドパッケージを使用してアプリケーションがデプロイされます。 imageUrl: # イメージの URL。このパラメータは、packageType パラメータを Image に設定した場合にのみ有効になります。オンプレミス環境で Docker イメージをビルドしてアプリケーションをデプロイすることもできます。 - デプロイ構成を完了します。
パッケージ化されたプロジェクトのルートディレクトリに、
YAML形式のデプロイファイルを作成します。ファイル名をtoolkit_deploy.yamlにし、以下の情報をファイルに追加します。apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # デプロイするアプリケーションの ID。 appId パラメータを指定する場合、namespaceId パラメータと appName パラメータを指定する必要はありません。 namespaceId: # アプリケーションをデプロイするマイクロサービス名前空間の ID。 appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。 appName: # アプリケーションの名前。 appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。 updateStrategy: type: GrayBatchUpdate # 段階的リリースモード。 grayUpdate: # 段階的リリース設定。 gray: x # 段階的リリースを適用するインスタンスの数を指定する整数値。 batchUpdate: # 段階的リリースのバッチの設定。 batch: x # バッチの数を指定する整数値。 releaseType: xxx # リリースタイプ。値 auto は自動リリースを示します。値 manual は手動リリースを示します。 batchWaitTime: x # 2 つの連続したバッチの間隔を指定する整数値。単位:分。
- アカウント構成を完了します。
- デプロイジョブをビルドします。
pom.xmlがあるディレクトリに移動します。Maven サブモジュールをデプロイする場合は、サブモジュールのpom.xmlファイルがあるディレクトリに移動します。次に、次のコマンドを実行します。mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkittoolkit:deploy: パッケージ操作の完了後にアプリケーションをデプロイするようにシステムに指示します。-Dtoolkit_profile: アカウント構成ファイルを指定します。pom.xmlと同じディレクトリにアカウント構成ファイルがあり、ファイル名が.toolkit_profile.yamlの場合、このパラメーターは不要です。この場合、アカウント構成ファイルはプラグインによって自動的に取得されます。ファイル名の先頭にピリオド (.) が含まれていることに注意してください。-Dtoolkit_package: パッケージファイルを指定します。pom.xmlと同じディレクトリにパッケージファイルがあり、ファイル名が.toolkit_package.yamlの場合、このパラメーターは不要です。この場合、パッケージファイルはプラグインによって自動的に取得されます。ファイル名の先頭にピリオド (.) が含まれていることに注意してください。-Dtoolkit_deploy: デプロイファイルを指定します。pom.xmlと同じディレクトリにデプロイファイルがあり、ファイル名が.toolkit_deploy.yamlの場合、このパラメーターは不要です。この場合、デプロイファイルはプラグインによって自動的に取得されます。ファイル名の先頭にピリオド (.) が含まれていることに注意してください。-Ddeploy_version: デプロイするバージョンを指定します。指定されたバージョンは、デプロイ構成ファイルで構成されているバージョンよりも優先されます。説明 toolkit-maven-plugin 1.0.6 以降では、このパラメーターがサポートされています。
パッケージングコマンドを実行すると、次の情報が表示されます。[ビルド成功] と表示された場合は、デプロイメントは成功です。
詳細設定項目
- パッケージング パラメーターを指定します。
パッケージ ファイルでは、次のパラメーターがサポートされています。
apiVersion: V1 kind: AppPackage spec: packageType: # アプリケーションデプロイメントパッケージのタイプ。有効な値は、War、FatJar、Image、および url です。 imageUrl: # イメージの URL。アプリケーションをデプロイするためにイメージを使用する場合、このパラメーターは必須です。 packageUrl: # パッケージの URL。packageType パラメーターを url に設定した場合、このパラメーターをアプリケーションのデプロイに使用されるパッケージのアドレスに設定できます。 build: docker: dockerfile: # Docker イメージのビルドに使用されるファイル。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。 imageRepoAddress: # 使用する Alibaba Cloud イメージリポジトリのアドレス。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。 imageTag: # イメージタグ。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。 imageRepoUser: # Alibaba Cloud イメージリポジトリへのアクセスに使用されるユーザー名。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。 imageRepoPassword: # Alibaba Cloud イメージリポジトリへのアクセスに使用されるパスワード。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。 oss: bucket: # デプロイメントパッケージの保存先となるオブジェクトストレージサービス(OSS)バケットの名前。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。 key: # OSS バケットのパス。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。 accessKeyId: # OSS へのアクセスに使用される AccessKey ID。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。 accessKeySecret: # OSS へのアクセスに使用される AccessKey シークレット。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。 - デプロイメント パラメーターを指定します。
デプロイメント ファイルでサポートされているパラメーターを表示するには、ここをクリックしてください。
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appName: # アプリケーションの名前。 namespaceId: # アプリケーションがデプロイされるマイクロサービス名前空間。 appId: # アプリケーションの ID。プラグインは、指定された ID で識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。 version: # デプロイするバージョン。デフォルトの形式は、日、時、分、秒の値で構成されます。 jdk: # デプロイされたパッケージが依存する Java Development Kit(JDK)のバージョン。Open JDK 7 および Open JDK 8 がサポートされています。イメージを使用してアプリケーションをデプロイする場合、このパラメーターは使用できません。 webContainer: # デプロイされたパッケージが依存する Tomcat コンテナのバージョン。apache-tomcat-7.0.91 がサポートされています。イメージを使用してアプリケーションをデプロイする場合、このパラメーターは使用できません。 batchWaitTime: # 2 つの連続したバッチ間のインターバル。 command: # イメージの起動に使用されるコマンド。コマンドは、コンテナ内の既存の実行可能オブジェクトである必要があります。たとえば、コマンドを sleep に設定できます。このパラメーターを指定すると、イメージの元の起動コマンドは無効になります。 commandArgs: # イメージ起動コマンドのパラメーター。これらのパラメーターは、上記の起動コマンドで必要です。 - 1d envs: # コンテナ環境変数。 - name: envtmp0 value: '0' - name: envtmp1 value: '1' liveness: # コンテナのヘルス ステータスを確認します。ヘルス チェックに合格しなかったコンテナは停止され、その後回復されます。 exec: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。 command: - sleep - 1s tcpSocket: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。 host: "192.168.1.109" # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。 port: "18081" # ポート番号。値は文字列である必要があります。 httpGet: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。 host: "192.168.1.109" # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。 port: "18081" # ポート番号。値は文字列である必要があります。 path: "/health" scheme: "HTTP" # 有効な値は HTTP および HTTPS です。 httpHeaders: - name: "color" value: "blue" initialDelaySeconds: 5 timeoutSeconds: 11 periodSeconds: 5 successThreshold: 1 # 値は 1 に固定されており、変更できません。 failureThreshold: 3 readiness: # アプリケーションの起動ステータスを確認します。このヘルス チェックに複数回合格しなかったコンテナは停止され、その後再起動されます。ヘルス チェックに合格しなかったコンテナは、サーバーロードバランサー(SLB)インスタンスからトラフィックを受信しません。 exec: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。 command: - sleep - 1s tcpSocket: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。 host: "192.168.1.109" # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。 port: "18081" # ポート番号。値は文字列である必要があります。 httpGet: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。 host: "192.168.1.109" # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。 port: "18081" # ポート番号。値は文字列である必要があります。 path: "/health" scheme: "HTTP" # 有効な値は HTTP および HTTPS です。 httpHeaders: - name: "color" value: "blue" initialDelaySeconds: 5 timeoutSeconds: 11
一般的なシナリオ
- シナリオ 1:オンプレミス環境で WAR または FatJar パッケージをビルドしてアプリケーションをデプロイするたとえば、中国 (北京) リージョンで WAR または FatJar パッケージを使用して EDAS にデプロイされているアプリケーションがあり、オンプレミス環境で WAR または FatJar パッケージをビルドしてアプリケーションを再デプロイするとします。以下は、パッケージ化とデプロイの構成です。
- パッケージファイル:
apiVersion: V1 kind: AppPackage spec: packageType: War # パッケージタイプ - デプロイファイル:
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # アプリケーションの ID。プラグインは、指定された ID によって識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。 namespaceId: # (オプション) アプリケーションをデプロイするマイクロサービスの名前空間。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。 appName: # (オプション) アプリケーションの名前。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
- パッケージファイル:
- シナリオ 2:既存のイメージの URL を使用してアプリケーションをデプロイするたとえば、中国 (北京) リージョンでイメージを使用してデプロイされているアプリケーションがあり、既存のイメージ (registry.cn-beijing.aliyuncs.com/test/gateway:latest) を使用してアプリケーションを再デプロイするとします。以下は、パッケージ化とデプロイの構成です。
- パッケージファイル:
apiVersion: V1 kind: AppPackage spec: packageType: Image imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest # イメージの URL - デプロイファイル:
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # アプリケーションの ID。プラグインは、指定された ID によって識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。 namespaceId: # (オプション) アプリケーションをデプロイするマイクロサービスの名前空間。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。 appName: # (オプション) アプリケーションの名前。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
- パッケージファイル:
- シナリオ 3:オンプレミス環境でイメージをビルドし、リポジトリにアップロードしてアプリケーションをデプロイするたとえば、中国 (北京) リージョンでイメージを使用してデプロイされているアプリケーションがあり、オンプレミス環境でイメージをコンパイルおよびビルドし、Alibaba Cloud イメージリポジトリにアップロードしてアプリケーションを再デプロイするとします。以下は、パッケージ化とデプロイの構成です。
- パッケージファイル:
apiVersion: V1 kind: AppPackage spec: packageType: Image build: docker: dockerfile: Dockerfile # Dockerfile imageRepoAddress: # イメージリポジトリのアドレス imageTag: # イメージタグ imageRepoUser: # イメージリポジトリにアクセスするためのユーザー名 imageRepoPassword: # イメージリポジトリにアクセスするためのパスワード - デプロイファイル:
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # アプリケーションの ID。プラグインは、指定された ID によって識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。 namespaceId: # (オプション) アプリケーションをデプロイするマイクロサービスの名前空間。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。 appName: # (オプション) アプリケーションの名前。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
- パッケージファイル: