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

自动化部署应用

  1. 在您的打包工程的pom.xml文件中增加如下的插件依赖。
    <build>
    <plugins>
    <plugin>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>toolkit-maven-plugin</artifactId>
         <version>1.0.9</version>
    </plugin>
    </plugins>
    </build>                       
  2. 在工程目录下创建一个文件格式为YAML的.edas_config.yaml文件。如果部署的工程为Maven的子模块,那么在子模块的目录下创建该文件。
    说明 关于多模块工程部署更多方式,请参见多模块工程部署
    env:
         region_id: cn-beijing
    app:
         app_id: eb20****-e6ee-4f6d-a36f-5f6a5455****                        

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

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

    1. 登录EDAS控制台
    2. 在左侧导航栏中选择应用管理 > 应用列表,选择命名空间
    3. 应用列表页面选择ECS集群类型,单击待部署的应用名称。
    4. 在应用基本信息页面,单击部署应用
    5. 选择部署模式,常规发布(单批/多批)金丝雀发布(灰度),然后单击开始部署
    6. 单击部署应用页面下方的生成Maven插件配置获取参数信息。
      EDAS通过maven部署应用之生成Maven插件配置
  3. 新建账号文件。

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

    配置示例如下。

    access_key_id: abc
    access_key_secret: 1234567890                        
    说明 以上配置中的abc和1234567890只是示例,请替换成您的Access Key ID和Access Key Secret。该配置中Access Key ID和Access Key Secret只会用来生成请求签名,不会用于网络传输等其他用途。
  4. 进入您的工程目录(如果为Maven多模块则进入子模块目录),执行以下打包命令。
    mvn clean package toolkit:deploy -Daccess_key_file={账号文件路径}
                            
    • toolkit:deploy: 使用toolkit-maven-plugin在打包成功后进行应用部署。只有添加此参数才会进行应用部署。
    • access_key_file:阿里云账号文件。
      说明 更多指定密钥对的方式可参见账号配置及账号优先级说明
    执行以上打包命令后,看到如下输出表示您已经成功使用toolkit-maven-plugin部署了应用。EDAS成功使用toolkit-maven-plugin部署了应用

    使用-Djar_path指定的路径文件进行部署。

    mvn toolkit:deploy -Daccess_key_file={账号文件路径} -Djar_path=target/demo.jar
                            
    注意 您还可以在参照更多配置项在env中配置账号文件路径,上述-D方式优先级大于env中的配置。

更多配置项

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

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

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

配置项 名称 是否必选/示例值 描述
env region_id 应用所在的地域ID
jar_path target/demo.jar 用于忽略Maven打包流程,直接使用此路径的包部署,支持绝对路径和相对路径。
endpoint 用于专有云设置POP网关接入点
app app_id 应用ID
release_type 1 用户设置手动分批还是自动分批:
  • 0:自动分批
  • 1:手动分批
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等待时间超过此阈值,那么此插件会自动退出。
oss region_id 目标Bucket所在的地域ID。默认使用应用所在的地域ID。
bucket 目标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的自定义账号密钥。

配置示例一:指定分组和部署包的版本

例如我们在北京地域有一个ID为eb20dc8a-e6ee-4f6d-a36f-5f6a545****的应用,希望部署的分组ID为06923bb9-8c5f-4508-94d8-517b692f****,部署包版本为1.2。那么配置如下:

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

配置示例二:指定OSS存储

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

env:
  region_id: cn-beijing
app:
  app_id: eb20dc8a-e6ee-4f6d-a36f-5f6a5455****
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来指定配置文件。
  • 如果既存在默认配置文件,也已通过参数指定配置文件,那么此插件会使用参数指定的配置文件。

账号配置及账号优先级说明

当使用此插件部署应用时,您需提供部署应用的阿里云账号密钥对。目前此插件支持多种配置方式,当存在重复配置的情况时,优先级高的配置方式会覆盖优先级低的配置方式。优先级从高到低的配置方式如下:

  • 命令行指定AccessKey ID或AccessKey Secret参数:您可以通过如下任一方式来指定access_key_id或access_key_secret:
    • 在使用Maven命令打包时,通过-Daccess_key_id=xx -Daccess_key_secret=xx来指定。
    • 在pom中配置此插件时,配置AccessKey ID或AccessKey Secret参数如下所示:
      <plugin>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>toolkit-maven-plugin</artifactId>
         <version>1.0.3</version>
      <configuration>
        <accessKeyId>abc</accessKeyId>
        <accessKeySecret>1234567890</accessKeySecret>
      </configuration>
      </plugin>                            
  • 命令行指定账号文件(推荐):在使用Maven命令打包时,通过-Daccess_key_file={账号文件路径来指定YAML格式的账号文件。例如:
    access_key_id: abc
    access_key_secret: 1234567890                    
  • 使用默认的阿里云账号文件:如果没有通过以上两种方式指定账号,那么此插件会使用您曾经配置过的阿里云账号进行应用部署。

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

    [default]
    aliyun_access_key_secret = 1234567890
    aliyun_access_key_id = abc                    

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

  • aliyun:如果您使用过旧版本的aliyun工具并且配置过阿里云账号,那么aliyun工具会在您当前Home目录下生成一个.aliyun目录,并且在.aliyun目录下创建一个config.json文件来保存您的账号信息。以macOS系统为例,假如系统用户为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")来获取相应的值。

多模块工程部署

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

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

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

    在父工程中执行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命令即可。

专有云支持

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

问题反馈

如果您在使用工具部署应用的过程中有任何疑问,欢迎您扫描下面的二维码加入钉钉群进行反馈。

工具部署答疑群