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

自动化部署

通过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>                            
    说明 toolkit-maven-plugin建议使用最近版本。
  2. 配置插件

    配置插件主要包含账号配置,打包配置及部署配置。如果需要更多自定义配置项,请参见打包参数部署参数

    1. 账号配置

      在打包工程的根目录下创建文件格式为YAML的账号配置文件,命名为toolkit_profile.yaml并填入如下信息:

      regionId:        #应用所在区域,如北京为"cn-beijing",上海为"cn-shanghai",杭州为"cn-hangzhou"。
      jarPath:         #部署包路径,配置该参数可忽略Maven打包流程从而直接使用配置路径内的包部署,您可配置绝对路径和相对路径。
      accessKeyId:     #访问阿里云资源的AK,建议使用子账号的AK降低安全风险。
      accessKeySecret: #访问阿里云资源的SK,建议使用子账号的SK降低安全风险。
    2. 打包配置

      在打包工程的根目录下创建文件格式为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镜像进行部署,可参考打包文件参数设置相关参数。
    3. 部署配置

      在打包工程的根目录下创建文件格式为YAML的部署文件,命名为toolkit_deploy.yaml,并填入如下信息:

      apiVersion: V1
      kind: AppDeployment
      spec:
       type: kubernetes
       target:
        appId:        #部署应用的ID,如果配置了appId则无需配置namespaceId和appName。
        namespaceId:  #所属区域,如不清楚appId,可使用此所属区域及应用名称进行部署。
        appName:      #应用名称,如不清楚appId,可使用此应用名称及命名空间进行部署。
        updateStrategy:
         type:GrayBatchUpdate    #灰度分批发布。
         grayUpdate:              #灰度设置。
          gray: x                 #灰度机器数量。
         batchUpdate:             #分批设置。
          batch: x                #批次数量。
          releaseType: xxx        #发布方式:auto表示自动发布,manual表示手动发布。
          batchWaitTime: x        #批次间隔时间。
  3. 构建部署
    进入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(注意:文件名最前面有个小数点),可不填此参数,插件会自动获取。
    • -Dtoolkit_package:指定打包文件。如果打包文件跟pom.xml在同一个目录下,且名字为.toolkit_package.yaml(注意:文件名最前面有个小数点),可不填此参数,插件会自动获取。
    • -Dtoolkit_deploy:指定部署文件。如果部署文件跟pom.xml在同一个目录下,且名字为.toolkit_deploy.yaml(注意:文件名最前面有个小数点),可不填此参数,插件会自动获取取。
    • -Ddeploy version:指定部署的版本号,优先级高于部署配置文件中的version配置。
      说明 toolkit-maven-plugin插件1.0.6及以后版本支持配置该参数。
    执行该打包命令后,系统显示如下结果,当回显信息中显示“BUDILD SUCCESS”表示部署成功。通过Maven上部署SAE成功打包信息

更多配置项

  1. 打包参数

    打包文件支持的参数如下所示。

    apiVersion: V1
    kind: AppPackage
    spec:
      packageType:  #应用部署包类型,支持War、FatJar、Image、url;您只有在该处配置了url,那么packageUrl才能生效。
      imageUrl:     #镜像地址,Image包类型应用可填入。
      packageUrl:   #包地址,War、FatJar类型应用可填入。
    build:
        docker:
           dockerfile:        #Docker镜像构建文件。如您希望在本地构建镜像部署,需填入此字段。
           imageRepoAddress:  #阿里云镜像仓库地址。如您希望在本地构建镜像部署,需填入此字段。
           imageTag:          #镜像Tag。如您希望在本地构建镜像部署,需填入此字段。
           imageRepoUser:     #阿里云镜像仓库用户名。如您希望在本地构建镜像部署,需填入此字段。
           imageRepoPassword: #阿里云镜像仓库密码。如您希望在本地构建镜像部署,需填入此字段。
              OSS:
                bucket:          #目标存储桶名称。如您希望使用自定义的OSS仓库存储部署包,需填入此字段。
                key:             #OSS自定义路径。如您希望使用自定义的OSS仓库存储部署包,需填入此字段。
                accessKeyId:     #OSS账号。如您希望使用自定义的OSS仓库存储包,需填入此字段。
                accessKeySecret: #OSS密码。如您希望使用自定义的OSS仓库存储包,可填入此字段。
  2. 部署参数

    部署文件支持的参数如下所示。

    apiVersion: V1
    kind: AppDeployment
    spec:
      type: kubernetes
      target:
        appName:     #应用名称。
        namespaceId: #应用所在命名空间。
        appId:       #应用ID。插件会使用此应用进行部署,如未填入则使用namespaceId和appName来查找应用进行部署。
        version:     #部署版本号,默认使用日时分秒格式。
        jdk:         #部署的包依赖的JDK版本,JDK支持版本为Open JDK 7和Open JDK 8。镜像不支持。
        webContainer:  #部署的包依赖的Tomcat版本,WebContainer支持apache-tomcat-7.0.91。镜像不支持。
        batchWaitTime: #分批等待时间。
        command:       #镜像启动命令。该命令必须为容器内存在的可执行的对象。例如: sleep。设置该命令将导致镜像原本的启动命令失效。
        commandArgs:   #镜像启动命令参数。上述启动命令所需参数。
        - 1d
      envs:       #容器环境变量参数。
        - name: envtmp0
          value: '0'
        - name: envtmp1
          value: '1'
      liveness:   #容器健康检查,健康检查失败的容器将停止运行并恢复。
         exec:
          command:
            - sleep
            - 1s
        initialDelaySeconds: 5
        timeoutSeconds: 11
      readiness:  #应用启动状态检查,多次健康检查失败的容器将停止运行并重启。不通过健康检查的容器将不会有SLB流量进入。
         exec:
          command:
            - sleep
            - 1s
        initialDelaySeconds: 5
        timeoutSeconds: 11

典型场景示例

典型部署场景及相关配置示例。
  • 场景一:本地构建War(或FatJar)包进行部署
    假设您在北京环境有WAR(或FatJar)类型的EDAS应用,期望本地构建WAR(或FatJar)进行部署。打包配置和部署配置如下所示。
    • 打包文件:
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: War                                    
    • 部署文件:
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        #应用ID。插件会使用此应用进行部署,如未填入则使用namespaceId和appName来查找应用进行部署。
          namespaceId:  #【可选】命名空间,如不清楚appId,可使用此命名空间及应用名称进行部署。
          appName:      #【可选】应用名称,如不清楚appId,可使用此命名空间及应用名称进行部署。
  • 场景二:使用已有镜像地址部署镜像类型应用
    假设您在北京环境有一个镜像类型应用,期望使用已有的镜像(registry.cn-beijing.aliyuncs.com/test/gateway:latest )部署应用。打包配置和部署配置如下所示。
    • 打包文件:
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: Image
        imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest                                    
    • 部署文件:
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        #应用ID。插件会使用此应用进行部署,如未填入则使用namespaceId和appName来查找应用进行部署。
          namespaceId:  #【可选】命名空间,如不清楚appId,可使用此命名空间及应用名称进行部署。
          appName:      #【可选】应用名称,如不清楚appId,可使用此命名空间及应用名称进行部署。
  • 场景三:本地构建镜像上传至仓库并部署应用
    假设您在北京环境有镜像类型应用,期望在本地编译并构建为镜像,并上传到阿里云镜像仓库进行部署,打包配置和部署配置如下所示。
    • 打包文件:
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: Image
        build:
          docker:
             dockerfile: Dockerfile #指定Dockerfile。imageRepoAddress:      #镜像仓库地址。imageTag:              #镜像Tag。imageRepoUser:         #镜像仓库用户名。imageRepoPassword:     #镜像仓库密码。
    • 部署文件:
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        #应用ID。插件会使用此应用进行部署,如未填入则使用namespaceId和appName来查找应用进行部署。
          namespaceId:  #【可选】命名空间,如不清楚appId,可使用此命名空间及应用名称进行部署。
          appName:      #【可选】应用名称,如不清楚appId,可使用此命名空间及应用名称进行部署。

问题反馈

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

工具部署答疑群