# 部署发布

微信云托管在部署发布采用了发布单的形式,点击发布即生成一个发布单,在发布过程中的所有操作均记做发布流水记录,让所有操作都可追溯。

部署发布流程包含3个子流程,即新建版本、测试、灰度上线,以下将详细说明。

# 发布

创建服务成功后,将在服务列表中显示对应的服务,点击该服务模块即可进入服务详情中,默认的控制台 TAB 即为「部署发布」。

# 首次发布

当前首次发布部署时,有两个子流程,即选择代码和发布。

# 1. 选择代码

选择代码时,方式来源有5种,分别是:

  • 绑定 Github 仓库
  • 绑定 Gitlab 仓库
  • 绑定 Gitee 仓库
  • 手动上传代码包
  • 拉取镜像

以上前3种,拉取代码仓库,会将信息自动保存到「服务设置 - 流水线」中,在后续发布时,可以直接选择流水线发布。

image-20210618190217413

  • 镜像仓库的上传配置,请参考镜像仓库

  • 手动上传代码包形式,配置说明如下:

    • 上传方式: 支持代码文件夹、代码 zip 压缩包两种方式,大小不能超过 2 MiB
    • 端口: 项目部署时对外提供服务的端口
    • 目标目录: 指定目录进行构建过程,不填为根目录
    • DockerFile文件: 有文件则可以指定 Dockerfile 路径和名称,如果没有则可根据框架语言选择官方设定。

首次发布时,还会增加环境变量配置项,后续可以直接在「服务设置 - 基本信息」中修改。

# 2. 部署发布

选择代码后,就会直接进入部署发布阶段,如果是代码上传(前4种),会先将代码构建为镜像,然后将镜像部署;如果是镜像上传,则直接部署。

部署过程的日志会直接显示到控制台中,如果部署出现问题,可以复制右下角的信息给我们反馈,我们会准确定位原因。

首次部署时会自动将版本推到线上,接下来即可进行公网访问或者小程序调试。

image-20210618190217413

# 非首次发布

服务非首次发布,已有流量在服务上,为保证现网服务的稳定性、降低发布风险及减少影响范围,新版本建议做定向测试无问题后,再按一定的流量比例进行灰度上线。

# 1. 选择代码

选择代码与首次发布基本一致,如果再首次发布时选择了代码仓库构建,或者自己手动在「服务设置 - 流水线」中配置了流水线,则会展示如下方式:

  • 执行流水线:首次时会自动保存为流水线,可以随时修改。
  • 手动上传代码包
  • 拉取镜像

另外在高级设置中多了「灰度发布」,如果不勾选,则部署后将自动推到现网;勾选后则进入测试灰度阶段。

image-20210618190332019

  • 点击「发布」,进入部署阶段,如果勾选了灰度发布,之后将
  • 点击「取消发布」,则当前发布单结单,页面返回到运行页面;
  • 非灰度发布时,会将现网流量100%的切到当前版本,如版本有问题或服务流量过大会导致服务崩溃,谨慎操作,建议灰度上线;
# 2. 部署发布

阶段与首次发布相同,不再阐述。

# 3. 测试

选择代码时如勾选「灰度发布」则会进入此阶段,否则将在部署发布后终止。

云托管提供 OpenID 白名单、URL参数两种测试方式。

OpenID白名单,点击「更新测试配置」则当前 OpenID 白名单配置生效,根据所填写及勾选的所有小程序开发者的 OpenID 进行加白,对当前发布单的版本只有当前 OpenID 白名单用户可访问。

image-20210618190424982

URL参数,设定 URL 参数 key 和value(支持 Glob 表达式),点击「更新测试配置」则当前 URL 参数配置生效,符合条件的请求将路由到当前发布单的版本;

选择 URL 参数测试方式时,至少配置1个 key 和value条件。

image-20210618190448501

  • 一旦更新测试配置,则当前流程不可返回上一步再重新选择版本
  • 如需测试其他版本,则点击「取消发布」结束当前发布流程,重新点击发布选择其他版本走发布流程即可;
  • 如当前版本测试无问题,则点击「灰度上线」,灰度流量比例进行上线;
  • 测试步骤非必经路径,如不需对版本进行测试,则进入测试流程中时直接点击「灰度上线」,二次确认后即可跳过测试步骤;(建议版本测试后再上线)
  • 如此时离开当前流程页面,下次再进来时会在控制台顶部展示部署的banner,你可以直接点击再次回到部署过程。
# 3. 灰度上线

调整灰度流量比例对目标发布版本进行灰度上线,点击「调整流量比例」,弹窗输入/加减(10%粒度)流量比例,确定后,后台将把所填的流量比例切到目标发布版本上。

image-20210618190549888

流量路由规则:用户首次进入时,按照流量比例随机进入某一个有流量的版本中,非首次进入时,该用户将一直进入到首次进入的版本中;

例: 版本1流量比例为20%,版本2流量比例为80%;用户 a 有20%的概率进入到版本1中,如此时随机到版本1,则在下次用户 a 再访问时继续进入到版本1中,不会再随机到版本2中,直到下次发布为止。

进入灰度上线步骤后,测试配置失效,可以 OpenID 白名单的方式指定灰度用户;

image-20210618190719403

指定后,对应的 OpenID 用户将脱离流量比例的随机路由规则,进入到当前灰度中的版本;

版本灰度的过程中,下方提供目标发布版本的监控视图、发布版本日志用作灰度上线过程中观察目标发布版本情况;

  • 只支持最多2个版本有流量;
  • 进入灰度上线后,测试阶段测试配置失效,且不可再回到上一步骤;
  • 支持将灰度流量比例回调,如将30%调整到10%;
  • 如此时离开当前流程页面,下次再进来时还会显示当前流程页面内容;点击发布后,如不取消发布,则部署发布将一直处于发布流程中;
# 4. 回退

在灰度上线的过程中,如发现版本存在问题,可通过「回退」终结当前发布流程,目标发布版本流量比例置零;

# 5. 结单

目标发布版本流量比例调整到100%,已完成发布流程,如想退出发布页面,可点击「结单」完成发布;

# 历史版本

每次进行部署发布时,都会在创建版本,你可以在控制台中看到历次的版本信息,部署日志和规格配置。

版本创建时,「服务配置 - 基础信息」里的规格、副本数、扩缩容条件、环境变量信息,会锁定在版本中,不可以再次更改。

版本分线上、线下两种状态:

  • 线上时,版本会遵循配置信息,保持最小的副本数。
  • 线下时,版本会无视配置信息,在下线半小时内缩容到0,并一直保持,直到再次被推到线上。

版本在二次回退或重新上线时,只会遵循版本创建时的配置信息,而不会读取现在的配置信息。

除了线上版本不可删除外,其余的版本均可以删除

# WebShell

请前往登录实例 WebShell 文档

# 回退

回退操作可以将线上流量接入之前的版本,一般用于线上故障或业务回滚场景中。

回退时只能向前回退,即高版本回退到低版本,不可反向回退。

如果你回退操作失误,选择的版本过于低,想要回退到稍微高一点的版本,则可以新建发布单,或者在「服务设置 - 基础信息」中直接点保存,将会触发一个新的版本,然后再此新版本的基础上再重新回退到正确的版本中。

回退时会先将目标版本的实例数保持到版本创建时的最小副本数,然后再接入现网。(在这里重复强调,是版本创建时的配置,不是回退发起时的配置

# 版本发布和回退的举例说明

版本发布和回退涉及的一些点,直接说明有点烧脑,在这里举一个形象的例子说明这一系列的过程和作用效果:

  • 新建服务后,创建「版本-001」,服务配置为0.5核、1GB、副本数1-50,扩缩容条件内存大于60%,日志采集路径stdout,环境变量 A=1,发布到现网。

  • 此时修改配置为副本数0-50,其他保持原样,自动触发创建「版本-002」,此时「版本-001」因为下线,缓存2分钟后,无视副本数设置,缩容实例为0。

  • 从「002」回退到「001」,此时先将「001」的实例数创建到当时最小副本数1,然后接入现网,「002」版本下线,缓存2分钟后缩容实例为0。

  • 发布新版本,保持最后的服务配置(副本数0-50),创建「版本-003」,此版本接入到现网,「001」下线,缓存2分钟后实例为0。

  • 修改服务配置为1核、2GB,副本数1-50,自动触发创建「版本-004」,此时版本「003」下线,缓存2分钟后缩容实例为0。

  • 从「004」回退到「003」,因为「003」最小副本数为0,所以不创建实例,直接接入现网,「004」下线,缓存2分钟后缩容实例为0,无视副本数设置。

  • 此时线上版本为「003」,版本所用的配置为「003」创建时的配置,即0.5核、1GB、副本数0-50,扩缩容条件内存大于60%,日志采集路径stdout,环境变量 A=1

# 版本发布缓存说明

新版本发布成功后,旧版本还会缓存2分钟时间。这段短暂的时间内,你将在控制台看到新旧版本同时都有实例,且部分请求还会走到旧版本。

旧版本缓存2分钟再正式下线,是出于平滑过渡的考虑,且新版本上线后如果异常需要快速回滚,旧版本的缓存能立刻生效,不影响业务。