您可以通过Maven的toolkit-maven-plugin插件完成SAE应用的自动化部署。本文介绍通过Maven自动化部署应用的典型场景、操作步骤、配置参数以及如何部署多模块工程。
前提条件
已创建应用。按需选择以下应用部署方式。
背景信息
toolkit-maven-plugin是一个开源工具,能够帮助您构建一个完整的生命周期框架,完成项目的基础工具建设。功能特性如下:
可扩展,能够轻松编写Java或脚本语言。
能够将任意数量的项目构建到预定义的输出类型中,例如JAR、WAR或基于项目元数据的分发,在大多数情况下无需执行任何脚本。
无需额外的配置,就可以与源代码管理系统(例如Subversion或Git)集成,并可以基于某个标签管理项目的发布。
典型场景示例
本地构建WAR或FatJAR包并部署应用
例如,您在华北2(北京)地域下有WAR类型的应用,期望在本地使用WAR包部署应用。文件打包和部署配置如下。
打包文件
apiVersion: V1 kind: AppPackage spec: packageType: War
部署文件
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: # 部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: # 应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称部署。 appName: # 应用名称。如果您不清楚应用ID,可使用应用名称及命名空间部署。
使用已有镜像地址部署镜像类型应用
例如,您在华北2(北京)地域下有一个镜像类型应用,期望使用已有的镜像部署应用。文件打包和部署配置如下。
打包文件
apiVersion: V1 kind: AppPackage spec: packageType: Image imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest # 镜像地址。 acrInstanceId: # ACR EE实例ID。如果需要使用ACR EE,则填写该参数。
部署文件
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: # 部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: # 应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称部署。 appName: # 应用名称。如果您不清楚应用ID,可使用应用名称及命名空间部署。
本地构建镜像上传至仓库并部署应用
例如,您在华北2(北京)地域下有镜像类型应用,期望在本地编译并构建为镜像,然后上传到阿里云镜像仓库部署应用。文件打包和部署配置如下。
打包文件
apiVersion: V1 kind: AppPackage spec: packageType: Image build: docker: dockerfile: Dockerfile # 指定Dockerfile。 imageRepoAddress: # 镜像仓库地址。 imageTag: # 镜像Tag。 imageRepoUser: # 镜像仓库用户名。 imageRepoPassword: # 镜像仓库密码。 acrInstanceId: # ACR EE实例ID。如果需要使用ACR EE,则填写该参数。
部署文件
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: # 部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: # 应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称部署。 appName: # 应用名称。如果您不清楚应用ID,可使用应用名称及命名空间部署。
部署应用
本示例介绍如何通过添加插件依赖并部署配置信息,将本地环境的工程部署到SAE上。
在打包工程的pom.xml文件中添加插件依赖。
说明建议您使用最新1.1.8版本的toolkit-maven-plugin。
<build> <plugins> <plugin> <groupId>com.alibaba.cloud</groupId> <artifactId>toolkit-maven-plugin</artifactId> <version>1.1.8</version> </plugin> </plugins> </build>
配置插件信息。
配置插件信息主要包括配置账号、打包和部署信息。更多信息,请参见更多配置项。
配置账号信息。
在打包工程的根目录下创建文件格式为
YAML
的账号配置文件,命名为toolkit_profile.yaml并输入以下信息。regionId: # 应用所在地域。 accessKeyId: # 访问阿里云资源的AccessKey ID,建议您使用RAM用户的AccessKey ID降低安全风险。 accessKeySecret: # 访问阿里云资源的AccessKey Secret,建议您使用RAM用户的AccessKey Secret降低安全风险。
配置打包信息。
在打包工程的根目录下创建文件格式为
YAML
的打包配置文件。如果打包工程为Maven的子模块,则需要在子模块的目录下创建该文件,并命名为toolkit_package.yaml
,输入以下信息。apiVersion: V1 kind: AppPackage spec: packageType: # 应用部署包类型,支持War、FatJar、Image、url。您只有在该处配置了URL,packageUrl才能生效。 packageUrl: # 部署包地址,War、FatJar类型应用可配置。不填则使用当前Maven构建的包部署。 imageUrl: # 如果部署包类型为Image,可配置此字段。Image类型也可以在本地构建Docker镜像部署。 acrInstanceId: # ACR EE实例ID。如果需要使用ACR EE,则填写该参数。
配置部署信息。
在打包工程的根目录下创建文件格式为
YAML
的部署文件,命名为toolkit_deploy.yaml
,并输入以下信息。apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: # 部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: # 应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称部署。 appName: # 应用名称。如果您不清楚应用ID,可使用应用名称及命名空间部署。
进入pom.xml所在的目录,执行以下命令构建部署工程。
重要如果部署的是Maven子模块,需要进入子模块pom.xml文件所在的目录执行部署工程。
mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml
命令参数说明如下。
参数
说明
toolkit:deploy
打包完成后,部署应用。
-Dtoolkit_profile
指定账号配置文件。如果账号文件与pom.xml在同一个目录下,且名称为
.toolkit_profile.yaml
,可不填写该参数,插件会自动获取。重要插件自动获取的
.toolkit_profile.yaml
文件名最前面包含英文句号。-Dtoolkit_package
指定打包文件。如果打包文件与pom.xml在同一个目录下,且名称为
.toolkit_package.yaml
,可不填写该参数,插件会自动获取。重要插件自动获取的
.toolkit_package.yaml
文件名最前面包含英文句号。-Dtoolkit_deploy
指定部署文件。如果部署文件与pom.xml在同一个目录下,且名称为
.toolkit_deploy.yaml
,可不填写该参数,插件会自动获取。重要插件自动获取的
.toolkit_deploy.yaml
文件名最前面包含英文句号。-Ddeploy_version
指定部署的版本号,优先级高于
toolkit_deploy.yaml
文件中的Version配置。说明该参数仅支持1.1.2及以上版本的toolkit-maven-plugin插件。
执行该打包命令后,系统显示如下结果,当返回信息中显示BUILD SUCCESS表示部署成功。
部署多模块工程
模块工程是常见的项目组织形式,toolkit-maven-plugin插件支持以下两种方式来部署多模块工程。
在父工程中执行打包及部署命令
此方式支持1.0.3及以上版本的toolkit-maven-plugin。
在父工程中执行toolkit:deploy
命令时,增加-Ddeploy_artifacts
参数来指定需要部署的子模块Artifact ID。如果希望部署多个子模块,请以英文半角逗号(,)分隔。
例如,一个CarShop工程存在以下示例的子模块:
carshop
itemcenter-api
itemcenter
detail
如果想同时部署itemcenter和detail子模块,您可以在carshop目录下,执行以下命令:
mvn clean package toolkit:deploy -Ddeploy_artifacts=itemcenter,detail
默认情况下,此插件会根据itemcenter和detail模块下的.edas_config.yaml
文件来分别部署对应的应用。您也可以通过增加-Dedas_config
参数来指定配置文件。
在子模块中执行打包及部署命令
此方式支持所有版本的toolkit-maven-plugin。
首先,在父工程中执行install
命令,将子模块依赖安装到本地的Maven仓库。然后,进入需要部署的子模块目录下执行toolkit:deploy
命令。