全部产品
云市场

通过 toolkit-maven-plugin 插件自动化部署应用

更新时间:2019-08-29 19:50:00

在 ECS 集群或 Swarm 集群中,基于 HSF、Dubbo 或 Spring Cloud 框架开发的应用均可以通过 toolkit-maven-plugin 插件来自动化部署。

自动化部署应用

  1. 在您的打包工程的 pom.xml 文件中增加如下的插件依赖。

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>com.alibaba.cloud</groupId>
    5. <artifactId>toolkit-maven-plugin</artifactId>
    6. <version>1.0.3</version>
    7. </plugin>
    8. </plugins>
    9. </build>
  2. 在工程目录下创建一个文件格式为 yaml 的 .edas_config.yaml 文件。如果部署的工程为 Maven 的子模块,那么在子模块的目录下创建该文件。(关于多模块工程部署更多方式,请参考多模块工程部署。)

    1. env:
    2. region_id: cn-beijing
    3. app:
    4. app_id: eb20****-e6ee-4f6d-a36f-5f6a5455****

    以上配置项中,region_id 为应用机器所在的区域 ID,app_id 为应用 ID,以上的配置参数为示例参数,请替换成您的实际的应用参数。更多配置参数请参见更多配置项

    若您不知如何设置以上参数值,请根据如下步骤获取:

    1. 登录 EDAS 控制台

    2. 在左侧导航栏中单击应用管理,进入应用列表页面点击你要进行的部署应用进入应用管理界面,单击部署应用

    3. 单击部署应用页面下面的生成 Maven 插件配置获取参数信息。

      自动化部署应用

  3. 新建一个账号文件,使用 yaml 格式配置 Access Key ID 和 Access Key Secret,Access Key ID 和 Access Key Secret 可登录阿里云用户信息管理查看,推荐使用 RAM 子账号(需已授予应用管理权限)来控制应用权限以提高应用安全。配置示例如下:

    1. access_key_id: abc
    2. access_key_secret: 1234567890

    说明:以上配置中的 abc 和 1234567890 只是示例,请替换成您的 Access Key ID 和 Access Key Secret。该配置中 Access Key ID 和 Access Key Secret 只会用来生成请求签名,不会用于网络传输等其他用途。

  4. 进入您的工程目录(如果为 Maven 多模块则进入子模块目录),执行以下打包命令。

    1. mvn clean package toolkit:deploy -Daccess_key_file={账号文件路径}

    以上参数的意义为:

    • toolkit:deploy: 使用 toolkit-maven-plugin 在打包成功后进行应用部署。只有添加此参数才会进行应用部署。

    • access_key_file:阿里云账号文件。(更多指定密钥对的方式可参考账号配置

  5. 执行以上打包命令后,看到如下输出表示您已经成功使用 toolkit-maven-plugin 部署了应用。

    部署结果输出

更多配置项

部署应用的配置项可分成三大类:

  • 基本环境(env)
  • 应用配置(app)
  • 存储配置(oss)

目前支持的配置项如下表所示:

类型key是否必须说明
envregion_id应用所在的区域ID
endpoint用于专有云设置 POP 网关接入点
appapp_id应用ID
package_version部署包的版本。默认为 pom 文件的 version 加上当前机器构建的时间,格式如:”1.0 (2018-09-27 19:00:00)”。
desc部署的描述
group_id 部署分组 ID。默认为所有分组。
batch 部署分批。默认为 1 批,最大为 5 批。
batch_wait_time 部署分批之间的等待时间,单位为分钟。默认不等待。
stage_timeout 展示每个变更流程 stage 状态的超时时间,单位为分钟,默认为 5 分钟。如果同时设置了 batch_wait_time,那么此参数在计算时会自动加上 batch_wait_time。在运行时,如果某个 stage 等待时间超过此阈值,那么此插件会自动退出。
ossregion_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-5f6a545**** 的应用,希望部署的分组 ID 为 06923bb9-8c5f-4508-94d8-517b692f****,部署包版本为 1.2。那么配置如下:

  1. env:
  2. region_id: cn-beijing
  3. app:
  4. app_id: eb20dc8a-e6ee-4f6d-a36f-5f6a5455****
  5. package_version: 1.2
  6. group_id: 06923bb9-8c5f-4508-94d8-517b692f****

配置示例二:指定 OSS 存储

例如我们希望部署一个 ID 为 eb20dc8a-e6ee-4f6d-a36f-5f6a5455**** 的应用,并将部署包上传到自己在北京 Region 的名为 release-pkg 的存储桶,文件对象名为 my.war,OSS 账号 ID 为 ABC,OSS 账号密钥为 1234567890。那么配置如下:

  1. env:
  2. region_id: cn-beijing
  3. app:
  4. app_id: eb20dc8a-e6ee-4f6d-a36f-5f6a5455****
  5. oss:
  6. region_id: cn-beijing
  7. bucket: release-pkg
  8. key: my.war
  9. access_key_id: ABC
  10. 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 参数如下所示:

      1. <plugin>
      2. <groupId>com.alibaba.cloud</groupId>
      3. <artifactId>toolkit-maven-plugin</artifactId>
      4. <version>1.0.3</version>
      5. <configuration>
      6. <accessKeyId>abc</accessKeyId>
      7. <accessKeySecret>1234567890</accessKeySecret>
      8. </configuration>
      9. </plugin>
  • 命令行指定账号文件(推荐):在使用 Maven 命令打包时,通过 -Daccess_key_file={账号文件路径 来指定 yaml 格式的账号文件。例如:

    1. access_key_id: abc
    2. access_key_secret: 1234567890
  • 使用默认的阿里云账号文件:如果没有通过以上两种方式指定账号,那么此插件会使用您曾经配置过的阿里云账号进行应用部署。

    • aliyuncli:如果您使用过最新的 aliyuncli 工具并且配置过阿里云账号,那么阿里云会在您当前 Home 目录下生成一个 .aliyuncli 目录,并在 .aliyuncli 目录下创建 credentials 文件来保存您的账号信息。以Mac系统为例,假如系统用户为jack,那么会在 /Users/jack/.aliyuncli/credentials 文件中保存如下信息:

      1. [default]
      2. aliyun_access_key_secret = 1234567890
      3. aliyun_access_key_id = abc

      此插件会使用此账号文件作为部署应用的账号。

  • aliyun:如果您使用过老的 aliyun 工具并且配置过阿里云账号,那么 aliyun 工具会在您当前 Home 目录下生成一个 .aliyun 目录,并且在 .aliyun 目录下创建一个 config.json 文件来保存您的账号信息。以Mac系统为例,假如系统用户为jack,那么会在 /Users/jack/.aliyun/config.json 文件中保存账号信息,例如:

    1. {
    2. "current": "",
    3. "profiles": [{
    4. "name": "default",
    5. "mode": "AK",
    6. "access_key_id": "",
    7. "access_key_secret": "",
    8. "sts_token": "",
    9. "ram_role_name": "",
    10. "ram_role_arn": "",
    11. "ram_session_name": "",
    12. "private_key": "",
    13. "key_pair_name": "",
    14. "expired_seconds": 0,
    15. "verified": "",
    16. "region_id": "",
    17. "output_format": "json",
    18. "language": "en",
    19. "site": "",
    20. "retry_timeout": 0,
    21. "retry_count": 0
    22. }, {
    23. "name": "",
    24. "mode": "AK",
    25. "access_key_id": "abc",
    26. "access_key_secret": "xxx",
    27. "sts_token": "",
    28. "ram_role_name": "",
    29. "ram_role_arn": "",
    30. "ram_session_name": "",
    31. "private_key": "",
    32. "key_pair_name": "",
    33. "expired_seconds": 0,
    34. "verified": "",
    35. "region_id": "cn-hangzhou",
    36. "output_format": "json",
    37. "language": "en",
    38. "site": "",
    39. "retry_timeout": 0,
    40. "retry_count": 0
    41. }],
    42. "meta_path": ""
    43. }
  • 系统环境变量:最后,此插件会尝试通过系统环境变量来获取 access_key_id 和 access_key_secret 的值。即通过 Java 代码的 System.getenv("access_key_id")System.getenv("access_key_secret") 来获取相应的值。

多模块工程部署

多模块工程是常见的项目组织形式,此 Maven 插件支持以下两种方式来部署您的多模块工程。

方式一:在父工程中执行打包及部署命令

此方式需要toolkit-maven-plugin版本为1.0.3及以上。

在父工程中执行 toolkit:deploy 命令时,增加 -Ddeploy_artifacts 参数来指定需要部署的子模块Artifact ID。如果希望部署多个子模块,请以半角逗号分隔。

例如:一个 CarShop 工程存在以下示例的子模块:

  • carshop
    • itemcenter-api
    • itemcenter
    • detail

如果想同时部署 itemcenter 和 detail 子模块,您可以在 carshop 目录下,执行以下命令:

  1. mvn clean package toolkit:deploy -Ddeploy_artifacts=itemcenter,detail

默认情况下,此插件会根据 itemcenter 和 detail 模块下的 .edas_config.yaml 文件来分别部署对应的应用。您也可以通过增加 -Dedas_config 参数来指定配置文件,详见指定配置文件

方式二:在子模块中执行打包及部署命令

此方式支持toolkit-maven-plugin所有版本。

首先,在父工程中执行 install 命令,将子模块依赖安装到本地的 Maven 仓库。然后,进入到需要部署的子模块目录下执行 toolkit:deploy 命令即可。

专有云支持

此插件可以在专有云曙光 V3.8.0 或更新版本使用,在使用前需要按照以下步骤在插件中配置 EDAS EndPoint,相关配置请参见更多配置项。Endpoint 请联系 EDAS 技术支持获取。