您可以通过Maven的toolkit-maven-plugin插件完成SAE应用的自动化部署。本文介绍通过Maven自动化部署应用的典型场景与操作步骤。
背景信息
典型场景示例
- 场景一:本地构建WAR或FatJAR包并部署
例如您在华北2(北京)地域下有WAR类型的应用,期望在本地使用WAR包部署应用。文件打包和部署配置如下。
- 打包文件
apiVersion: V1 kind: AppPackage spec: packageType: War
- 部署文件
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: #部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: #应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称进行部署。 appName: #应用名称。如果您不清楚应用ID,可使用应用名称及命名空间进行部署。
- 打包文件
- 场景二:使用已有镜像地址部署镜像类型应用
例如您在华北2(北京)地域下有一个镜像类型应用,期望使用已有的镜像部署应用。文件打包和部署配置如下。
- 打包文件
apiVersion: V1 kind: AppPackage spec: packageType: Image imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest #镜像地址。 acrInstanceId: #ACREE实例ID,如果需要使用ACREE才填写。
- 部署文件
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: #部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: #应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称进行部署。 appName: #应用名称。如果您不清楚应用ID,可使用应用名称及命名空间进行部署。
- 打包文件
- 场景三:本地构建镜像上传至仓库并部署应用
例如您在华北2(北京)地域下有镜像类型应用,期望在本地编译并构建为镜像,然后上传到阿里云镜像仓库部署应用。文件打包和部署配置如下。
- 打包文件
apiVersion: V1 kind: AppPackage spec: packageType: Image build: docker: dockerfile: Dockerfile #指定Dockerfile。 imageRepoAddress: #镜像仓库地址。 imageTag: #镜像Tag。 imageRepoUser: #镜像仓库用户名。 imageRepoPassword: #镜像仓库密码。 acrInstanceId: #ACREE实例ID,如果需要使用ACREE才填写。
- 部署文件
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appId: #部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。 namespaceId: #应用所属命名空间ID。如果您不清楚应用ID,可使用应用所属命名空间及应用名称进行部署。 appName: #应用名称。如果您不清楚应用ID,可使用应用名称及命名空间进行部署。
- 打包文件
操作步骤
更多配置项
- 打包参数
打包文件支持的参数如下所示。
apiVersion: V1 kind: AppPackage spec: packageType: #应用部署包类型,支持War、FatJar、Image、url。您只有在该处配置了URL,那么packageUrl才能生效。 imageUrl: #镜像地址,Image包类型应用可设置。如果设置了spec.build.docker,使用本地构建的镜像部署,则不需要设置该参数。 acrInstanceId: #ACREE实例ID,如果需要使用ACREE才填写。 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仓库存储包,可填入此字段。 useVpcEndpoint: true #是否通过内网上传文件,true表示通过内网上传,false表示不通过内网上传。 accessTimeout:30 #部署包临时访问地址的过期时间,单位为分钟,默认为30。如果您希望使用自定义的过期时间,可修改该字段。
- 部署参数
部署文件当前支持的完整参数如下所示。
apiVersion: V1 kind: AppDeployment spec: type: serverless target: appName: #应用名称。 namespaceId: #应用所在命名空间。 appId: #应用ID。插件会使用此应用进行部署,如果未填入则使用namespaceId和appname来查找应用进行部署。 version: #部署版本号,默认使用日时分秒格式。 jdk: #部署的包依赖的JDK版本,支持以下6个选项:OpenJDK 8、OpenJDK 7、Dragonwell 11、Dragonwell 8、openjdk-8u191-jdk-alpine3.9、openjdk-7u201-jdk-alpine3.9。镜像不支持。 webContainer: #部署的包依赖的Tomcat版本,支持以下2个选项:apache-tomcat-7.0.91、apache-tomcat-8.5.42。 batchWaitTime: #分批等待时间。 command: #镜像启动命令。该命令必须为容器内存在的可执行的对象。例如:sleep。设置该命令将导致镜像原本的启动命令失效。 commandArgs: #镜像启动命令参数。上述启动命令所需参数。 - 1d updateStrategy: type: GrayBatchUpdate #部署类型,BatchUpdate表示分批部署,GrayBatchUpdate表示灰度部署。 batchUpdate: batch: 2 #分批数,如果是灰度部署,表示灰度批次后的分批数。 releaseType: manual #分批类型。manual表示手动分批,auto表示自动分批。 batchWaitTime: 0 #分批类型为auto时使用,表示分批间间隔时间,单位为分钟。 grayUpdate: #灰度部署时需要配置。 gray: 1 #灰度的实例数。 envs: #容器环境变量参数。 - name: envtmp0 value: '0' - name: envtmp1 value: '1' customHostAlias: #容器内自定义host映射。 - hostName: 'samplehost1' ip: '127.X.X.X' - hostName: 'samplehost2' ip: '127.X.X.X' jarStartOptions: #JAR包启动应用选项。 jarStartArgs: #JAR包启动应用参数。 liveness: #容器健康检查,健康检查失败的容器将被重启。 exec: command: - sleep - 1s initialDelaySeconds: 5 timeoutSeconds: 11 periodSeconds: 30 readiness: #应用启动状态检查,多次健康检查失败的容器将被重启。不通过健康检查的容器将不会有SLB流量进入。 exec: command: - sleep - 1s initialDelaySeconds: 5 timeoutSeconds: 11 periodSeconds: 30 minReadyInstances: 1 #最小存活实例数。在滚动升级过程中或者滚动升级失败时,可用实例数都将尽可能不小于该值,为0则没有限制。弹性扩缩容的范围不能小于该值,否则将触发异常。 timezone: Asia/Shanghai #时区设置。 warStartOptions: CATALINA_OPTS=\"$CATALINA_OPTS $Options\" catalina.sh run #WAR包部署的启动命令。 tomcatConfig: #以WAR包部署的Tomcat配置。 port: 8082 maxThreads: 399 contextPath: /test/ uriEncoding: UTF-8 useBodyEncodingForUri: false nasConfig: #NAS配置。 nasId: 3fc4***** mountHost: 3fc4*****.cn-shanghai.nas.aliyuncs.com mountDesc: - mountPath: /nas nasPath: / postStart: #启动后处理。 exec: command: - sh - -c - echo helloPostStart preStop: #停止前处理。 exec: command: - sh - -c - echo helloPreStop terminationGracePeriodSeconds: 9 #优雅下线时间,单位为秒。 changeOrderDesc: maven test #发布说明。 autoEnableApplicationScalingRule: true #是否自动启用弹性规则。 associateEip: true #EIP配置。该配置与autoEnableApplicationScalingRule的配置互斥,即二者只能有一个取值为true。 configMapMountDesc: #ConfigMap配置。 - configMapId: 123** key: config1 mountPath: /configMap enableAhas: true #是否启用AHAS。 ossConfig: #OSS配置。 ossAkId: ****** ossAkSecret: ****** ossMountDescs: - bucketName: ******-cn-shanghai-s-***** bucketPath: / mountPath: /ossPath readOnly: true slsConfigs: #SLS日志采集设置,不填写选填项,则SAE会自动创建相应SLS资源;选填1和2,会采用指定SLS资源并自动创建Logtail配置;选填1、2和3,则完全采用您指定的SLS资源与Logtail配置。 - logDir: /tmp/test.log #必填,文件日志路径。 projectName: test-project #选填1。 logstoreName: test-logstore #选填2。 logtailName: test-logtail #选填3。