通过 Maven 插件自动部署应用

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 除了通过控制台方式将应用部署在SAE上外,还有一种方式是通过 Maven 的 toolkit-maven-plugin 插件进行自动化部署,本文将为大家详细讲解如何通过 Maven 插件自动部署应用。

37.jpeg
镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

一、自动化部署流程

通过toolkit-maven-plugin插件自动化部署应用的流程:首先添加插件依赖,接下来配置插件,最后构建部署。

1. 添加插件依赖

在pom.xml文件中增加如下所示的插件依赖。

<build>
    <plugins>
        <plugin>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>toolkit-maven-plugin</artifactId>
            <version>1.0.6</version>
        </plugin>
    </plugins>
</build>

说明 toolkit-maven-plugin建议使用最近版本。

2. 配置插件

配置插件主要包括账号配置、打包配置和部署配置。如果需要更多自定义配置项,请参见打包参数部署参数
  a. 账号配置 
在打包工程的根目录下创建文件格式为 YAML 的账号配置文件,命名为toolkit_profile.yaml并填入如下信息:

regionId:        #应用所在区域,如北京为`cn-beijing`,上海为`cn-shanghai`,杭州为`cn-hangzhou`。
accessKeyId:     #访问阿里云资源的AK,建议使用子账号的AK降低安全风险
accessKeySecret: #访问阿里云资源的SK,建议使用子账号的SK降低安全风险

  b. 打包配置
在打包工程的根目录下创建文件格式为 YAML 的打包配置文件。如果打包工程为Maven的子模块,则需要在子模块的目录下创建该文件,并命名为toolkit_package.yaml,填入如下信息:

apiVersion: V1
kind: AppPackage
spec:
 packageType: #应用部署包类型,支持WAR、FatJar、Image三种格式。
 packageUrl:  #如果应用部署包类型为WAR或FatJar,可填入此字段,不填则使用当前maven构建的包进行部署。
 imageUrl:    #如果部署包类型为Image,可填入此字段;Image类型也可以在本地构建Docker镜像进行部署,请参考打包文件参数章节设置相关参数。

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

apiVersion: V1
kind: AppDeployment
spec:
 type: serverless
 target:
  appId:        #部署应用的ID,如果配置了appId则无需配置namespaceId和appName
  namespaceId:  #所属区域,如不清楚appId,可使用此所属区域及应用名称进行部署
  appName:      #应用名称,如不清楚appId,可使用此应用名称及命名空间进行部署

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”表示部署成功。1.jpeg

二、更多配置项

  • 打包参数打包文件支持的参数如下所示:
apiVersion: V1
kind: AppPackage
spec:
  packageType:  #应用部署包类型,支持WAR、FatJar、Image。
  imageUrl:     #镜像地址,Image包类型应用可填入。
  packageUrl:   #包地址,WAR、FatJar类型应用可填入。
  build:
    docker:
       dockerfile:        #Docker镜像构建文件。如您希望在本地构建镜像部署,需填入此字段,例如:Dockerfile。
       imageRepoAddress:  #阿里云镜像仓库地址。如您希望在本地构建镜像部署,需填入此字段,例如:registry.cn-beijing.aliyuncs.com/edas_demo/demo。
       imageTag:          #镜像Tag。如您希望在本地构建镜像部署,需填入此字段,例如:test。
       imageRepoUser:     #阿里云镜像仓库用户名。如您希望在本地构建镜像部署,需填入此字段,例如:***@***。
       imageRepoPassword: #阿里云镜像仓库密码。如您希望在本地构建镜像部署,需填入此字段,例如:password。
    oss:
       bucket:      #目标存储桶名称。如您希望使用自定义的oss仓库存储部署包,需填入此字段,例如:bucket-name01。
       key:         #oss自定义路径。如您希望使用自定义的oss仓库存储部署包,需填入此字段,例如:test1/test.jpg。
       accessKeyId: #oss账号。如您希望使用自定义的oss仓库存储包,需填入此字段。
       accessKeySecret: #oss密码。如您希望使用自定义的oss仓库存储包,可填入此字段。
  • 部署参数部署文件支持的参数如下所示:
apiVersion: V1
kind: AppDeployment
spec:
  type: serverless
  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'
  customHostAlias:  #容器内自定义host映射
    - hostName: 'samplehost1'
      ip: '127.0.0.1'
    - hostName: 'samplehost2'
      ip: '127.0.0.1'
  jarStartOptions:  #JAR包启动应用选项
  jarStartArgs:     #JAR包启动应用参数
  liveness:   #容器健康检查,健康检查失败的容器将被杀死并恢复。
    exec:
      command:
        - sleep
        - 1s
    initialDelaySeconds: 5
    timeoutSeconds: 11
  readiness:  #应用启动状态检查,多次健康检查失败的容器将被杀死并重启。不通过健康检查的容器将不会有 SLB 流量进入。
    exec:
      command:
        - sleep
        - 1s
    initialDelaySeconds: 5
    timeoutSeconds: 11
  minReadyInstances: 1  #最小存活实例数。在滚动升级过程中或者滚动升级失败,可用实例数都将尽可能不小于该值,为 0 则不限制。弹性扩缩容的范围不应该小于该值,否则将触发异常。

三、典型场景示例

场景一:本地构建WAR或FatJar包并部署在SAE
假设您在北京环境有WAR或FatJar类型应用,期望本地构建WAR或FatJar部署在SAE。打包配置和部署配置如下所示。

  • 打包文件:
apiVersion: V1
kind: AppPackage
spec:
  packageType: War
  • 部署文件:
apiVersion: V1
kind: AppDeployment
spec:
  type: serverless
  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: serverless
  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: serverless
  target:
    appId:  #应用ID。插件会使用此应用进行部署,如未填入则使用namespaceId和appName来查找应用进行部署。
    namespaceId:  #【可选】命名空间,如不清楚appId,可使用此命名空间及应用名称进行部署
    appName:      #【可选】应用名称,如不清楚appId,可使用此命名空间及应用名称进行部署

阿里巴巴开源镜像站 提供全面,高效和稳定的系统镜像、应用软件下载、域名解析和时间同步服务。”

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
247 81
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
4月前
|
XML Java Maven
maven总结三: 常用插件
maven总结三: 常用插件
51 3
|
1月前
|
Java 编译器 测试技术
全面理解Maven Compiler Plugin-Maven编译插件
【10月更文挑战第16天】
223 1
|
3月前
|
Java Maven Spring
Maven重打包问题之maven-shade-plugin插件对于重复的class文件会如何处理
Maven重打包问题之maven-shade-plugin插件对于重复的class文件会如何处理
|
3月前
|
Java jenkins 持续交付
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
|
4月前
|
Java Maven
idea安装并使用maven依赖分析插件:Maven Helper
idea安装并使用maven依赖分析插件:Maven Helper
2604 7
|
4月前
|
数据可视化 Java 程序员
IDEA插件-Maven Helper
Maven Helper是一个用于Apache Maven项目的IntelliJ IDEA插件,它提供了一些有用的功能来帮助开发人员更好地管理和调试Maven项目。
687 0
IDEA插件-Maven Helper
|
3月前
|
Java Maven 开发者
"揭秘IDEA的神奇助手:Maven Helper插件,让你轻松驾驭复杂依赖,告别冲突噩梦!"
【8月更文挑战第20天】Maven Helper是一款提升Java开发者工作效率的IDEA插件,它能直观展示项目依赖关系并协助管理。主要功能包括依赖树视图、冲突检测与解决及依赖排除。安装简便,重启IDEA后即用。借助其“Dependencies”面板,开发者可以清晰了解依赖详情,快速定位并解决冲突问题,有效优化项目结构,提升开发效率。
246 0
|
3月前
|
Java
pandora boot热点应用探索问题之maven-compiler-plugin耗时较长的问题如何解决
pandora boot热点应用探索问题之maven-compiler-plugin耗时较长的问题如何解决
|
4月前
|
Java 测试技术 Maven
Maven 插件
Maven包含clean、default/build、site三个生命周期,用于清理、构建和文档创建。每个生命周期由多个阶段构成,作为标准化步骤。比如`mvn clean`调用Clean生命周期的clean阶段,其实体实现是maven-clean-plugin。Maven依赖插件执行任务,如生成jar/war、编译、测试、文档等。插件通过`mvn plugin-name:goal-name`形式执行特定目标。