针对 EDAS 开发者,如果当前正在使用 WAR 包或 JAR 包来部署应用,那么就可以通过 Cloud Toolkit Maven 插件部署应用到阿里云 EDAS。
第 1 步 :添加 Maven 依赖
在项目工程的 pom.xml 文件中,添加如下 <build>
依赖
<build>
<plugins>
<plugin>
<groupId>com.alibaba.cloud</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
</plugins>
</build>
从 Mavan 官方*仓库 查询最新版本
第 2 步 :设置 yaml 文件
在项目工程的根目录下创建一个 .edas_config.yaml 文件。如果打包工程为 Maven 的子模块,则需要在子模块的根目录下创建该文件,文件内容如下:
env:
region_id: cn-beijing
app:
app_id: eb20dc8a-0000-567-1234-5f6a54550453
以上配置项中,region_id 为应用机器所在的区域 ID,app_id 为应用 ID,以上的配置参数为示例参数,请替换成您的应用参数。更多参数请参阅本文文末的更多配置项。
第 3 步:关联 EDAS 账号
在任意目录下新建一个账号文件,使用 yaml 格式配置 Access Key ID 和 Access Key Secret,Access Key ID 和 Access Key Secret 可登录阿里云用户信息管理查看。配置示例如下:
access_key_id: 123456
access_key_secret: 7891011
第 4 步:完成部署
进入您的根目录(如果为 Maven 多模块则进入子模块目录),打包命令:
mvn package toolkit:deploy -Daccess_key_file={账号文件路径}
执行以上命令后,看到终端输出上图日志,代表应用已经成功部署到 EDAS 了。
更多配置项
部署应用的配置项可分成三大类:
- 基本环境(env)
- 应用配置(app)
- 存储配置(oss)
目前支持的配置项如下表所示:
类型 | key | 是否必须 | 说明 |
---|---|---|---|
env | region_id | 是 | 应用所在的区域ID |
app | app_id | 是 | 应用ID |
package_version | 否 | 部署包的版本。默认为 pom 文件的 version 加上当前机器构建的时间,格式如:"1.0 (2018-09-27 19:00:00)"。 | |
desc | 否 | 部署的描述 | |
group_id | 否 | 部署分组 ID。默认为所有分组。 | |
batch | 否 | 部署分批。默认为 1 批,最大为 5 批。 | |
batch_wait_time | 否 | 部署分批之间的等待时间,单位为分钟。默认不等待。 | |
buildPackId | 否 | 如果在创建应用时没有指定运行环境,且没有部署, 原生 Dubbo 或者 Spring Cloud 应用在第一次部署时可以不填。 非原生 Dubbo 或者 Spring Cloud 应在第一次部署时需要指定这个字段。(根据获取容器版本列表接口 ListBuildPackRequest 查询获取)。 | |
componentIds | 否 | 如果在创建应用时没有指定运行环境,且没有部署, 原生 Dubbo 或者 Spring Cloud 应用在第一次通过 WAR 包部署时,需要通过这个字段指定部署所依赖的 Apache Tomcat 组件的版本。(根据获取组件列表接口 ListComponentsRequest 接口查询获取)。 非原生 Dubbo 或者 Spring Cloud 应用在第一次通过 WAR 包部署时,可以不填。 | |
stage_timeout | 否 | 展示每个发布单 stage 状态的超时时间,单位为分钟,默认为 5 分钟。如果同时设置了 batch_wait_time,那么此参数在计算时会自动加上 batch_wait_time。在运行时,如果某个 stage 等待时间超过此阈值,那么此插件会自动退出。 | |
oss | region_id | 否 | 目标存储桶所在的区域 ID 。默认使用应用所在的区域 ID 。 |
bucket | 否 | 目标存储桶名称。默认使用 EDAS 提供的免费 OSS 存储空间。若指定了 oss 配置,则必须指定 bucket 参数,否则使用 EDAS 自动分配的免费 OSS 存储空间。 | |
key | 否 | 应用包上传到oss的自定义路径,默认使用 EDAS 提供的免费 OSS 存储空间。 若使用指定的 OSS 存储,则可通过该参数指明包存储路径,同时可以使用以下变量来进行参数化的路径配置 {region_id},{app_id},{version},例如: pkgs/petstore/{version}/store.war 该配置默认为 {region_id}/{app_id}/{version} | |
access_key_id | 否 | 应用包上传到 oss 的自定义账号 ID。 | |
access_key_secret | 否 | 应用包上传到 oss 的自定义账号密钥。 |
配置示例一:指定分组和部署包的版本
例如我们在北京 region 有一个 ID 为 eb20dc8a-e6ee-4f6d-a36f-5f6a54550453 的应用,希望部署的分组 ID 为 06923bb9-8c5f-4508-94d8-517b692f30b9,部署包版本为 1.2。那么配置如下:
env:
region_id: cn-beijing
app:
app_id: eb20dc8a-e6ee-4f6d-a36f-5f6a54550453
package_version: 1.2
group_id: 06923bb9-8c5f-4508-94d8-517b692f30b9
配置示例二:指定 OSS 存储
例如我们希望部署一个 ID 为 eb20dc8a-e6ee-4f6d-a36f-5f6a54550453 的应用,并将部署包上传到自己在北京 region 的名为 release-pkg 的存储桶,文件对象名为 my.war,OSS 账号 ID 为 ABC,OSS 账号密钥为 1234567890。那么配置如下:
env:
region_id: cn-beijing
app:
app_id: eb20dc8a-e6ee-4f6d-a36f-5f6a54550453
oss:
region_id: cn-beijing
bucket: release-pkg
key: my.war
access_key_id: ABC
access_key_secret: 1234567890
指定配置文件
- 当未指定配置文件时,此插件会默认使用打包工程的根目录下的
.edas_config.yaml
文件。如果打包工程为一个 Maven 工程的子模块,那么默认配置文件应该存放在该子模块的根目录下而不是整个 Maven 工程的根目录下。 - 您也可以通过设置参数
-Dedas_config=xxx
来指定配置文件。 - 如果既存在默认配置文件,也通过参数指定配置文件,那么此插件会使用参数指定的配置文件。
账号配置及账号优先级说明
当使用此插件部署应用时,您需提供部署应用的阿里云账号密钥对。目前此插件支持多种配置方式,当存在重复配置的情况时,优先级高的配置方式会覆盖优先级低的配置方式。优先级从高到低的配置方式罗列如下:
-
命令行指定 ak/sk 参数:您可以通过如下任一方式来指定 access_key_id/access_key_secret:
- 在使用 Maven 命令打包时,通过
-Daccess_key_id=xx -Daccess_key_secret=xx
来指定。 -
在 pom 中配置此插件时,配置 ak/sk 参数如下所示:
<plugin> <groupId>com.aliyun</groupId> <artifactId>edas-maven-plugin</artifactId> <version>2.30.0</version> <configuration> <accessKeyId>abc</accessKeyId> <accessKeySecret>1234567890</accessKeySecret> </configuration> </plugin>
- 在使用 Maven 命令打包时,通过
-
命令行指定账号文件(推荐):在使用 Maven 命令打包时,通过
-Daccess_key_file={账号文件路径
来指定 yaml 格式的账号文件。例如:access_key_id: abc access_key_secret: 1234567890
-
使用默认的阿里云账号文件:如果没有通过以上两种方式指定账号,那么此插件会使用您曾经配置过的阿里云账号进行应用部署。
-
aliyuncli:如果您使用过最新的 aliyuncli 工具并且配置过阿里云账号,那么阿里云会在您当前 Home 目录下生成一个
.aliyuncli
目录,并在.aliyuncli
目录下创建credentials
文件来保存您的账号信息。以Mac系统为例,假如系统用户为jack,那么会在/Users/jack/.aliyuncli/credentials
文件中保存如下信息:[default] aliyun_access_key_secret = 1234567890 aliyun_access_key_id = abc
-
此插件会使用此账号文件作为部署应用的账号。
-
aliyun:如果您使用过老的 aliyun 工具并且配置过阿里云账号,那么 aliyun 工具会在您当前 Home 目录下生成一个
.aliyun
目录,并且在.aliyun
目录下创建一个config.json
文件来保存您的账号信息。以Mac系统为例,假如系统用户为jack,那么会在/Users/jack/.aliyun/config.json
文件中保存账号信息,例如:{ "current": "", "profiles": [{ "name": "default", "mode": "AK", "access_key_id": "", "access_key_secret": "", "sts_token": "", "ram_role_name": "", "ram_role_arn": "", "ram_session_name": "", "private_key": "", "key_pair_name": "", "expired_seconds": 0, "verified": "", "region_id": "", "output_format": "json", "language": "en", "site": "", "retry_timeout": 0, "retry_count": 0 }, { "name": "", "mode": "AK", "access_key_id": "abc", "access_key_secret": "xxx", "sts_token": "", "ram_role_name": "", "ram_role_arn": "", "ram_session_name": "", "private_key": "", "key_pair_name": "", "expired_seconds": 0, "verified": "", "region_id": "cn-hangzhou", "output_format": "json", "language": "en", "site": "", "retry_timeout": 0, "retry_count": 0 }], "meta_path": "" }
-
系统环境变量:最后,此插件会尝试通过系统环境变量来获取 access_key_id 和 access_key_secret 的值。即通过 Java 代码的
System.getenv("access_key_id")
和System.getenv("access_key_secret")
来获取相应的值。