头图

微信云托管如何实现一套代码对应多个环境

微信云托管 是由微信团队联合腾讯云推出的一站式后端云服务。对于应用开发采用前后端分离架构的场景,云托管可做到免运维免域名、免服务器管理、防 DDoS 攻击和境外加速等,从代码管理到 CI/CD 流水线部署发布,提供全链路、低成本、企业级的云原生解决方案。

PC 端访问 https://cloud.weixin.qq.com 即可立即开始使用微信云托管。

前言

在项目开发时,通常具有多种环境,用来在开发的各个流程阶段进行作用,比如预发、生产。

环境的不同,对应的数据库等配置信息就有所不同,就必须要针对配置信息的变更,对应创建单独的代码仓库,流水线对应一个代码仓库,这样维护成本太大。

在这里主要是配置信息的变化,本篇主要介绍如何在项目代码中动态感知所处的微信云托管环境,进而给予正确的配置信息。

一、环境变量

微信云托管在运行项目服务过程中,带入了一个环境变量,名称为 CBR_ENV_ID ,意义是当前运行服务所处的 微信云托管环境ID

所以在项目内部,可以通过获取 CBR_ENV_ID 变量,来感知当前项目在哪个环境运行。

二、划分环境

微信云托管的环境可以建立多个,单个环境下可以有多个服务,和单独的数据库以及对象存储,在客观条件上做了隔离。

所以可以用 微信云托管环境 为维度进行隔离,创建项目开发的各个环境(预发、生产)

最终我们可以得到一个清单,样式如下:

werun—id1 = '预发'
werun—id2 = '生产'

其中 werun—id 为微信云托管的环境ID。

三、配置代码
接下来将上述清单的配置写到项目代码中,以 nodejs 为例:

假设一开始我们的配置 config.js 是这样的:

module.exports = {
  "text":"开发环境"
}

为了简化在这里只有一个text,实际应用中,应该是数据库、存储、网络通信的配置信息,也就是需要根据环境区分的信息都要写到一块。

接下来,加上 CBR_ENV_ID 变量,来进行改造,代码如下:

const config = {
  'werun—id1': {
    text:'预发环境'
  },
  'werun—id2': {
    text:'生产环境'
  },
  NO: {
    text: '本地环境'
  }
}

module.exports = function(env=null){
  const key = env || process.env.CBR_ENV_ID
  if(config[key] != null){
    return config[key]
  } else {
    return config.NO
  }
}

以上代码,将各个环境的配置信息统一囊括,然后根据 CBR_ENV_ID 变量来进行分发,如果没有预设的环境配置,则返回本地测试配置。

以上就已经做完了项目的动态配置改造,接下来我们开始配置流水线。

四、配置流水线

预发、生产环境在整体上应该保持一致,但在数据层面予以区分,所以两个环境在整体配置方面区别不大。

根据自己的业务需求,配置一个或若干个服务,选配数据库或对象存储等。

接下来我们重点来讲流水线的配置差异:

以上是新建流水线的信息框,两个环境的同一服务,应该配置相同的代码仓库、分支和目标目录。

在触发条件中,可以根据开发流程的不同稍有改变,合理选择是变更就触发还是定时触发;比如你每周三发布版本,那就按照计划选择定时触发就可以。

在发布策略中,因为生产环境要求稳定,所以不能直接全量发布,可以选择仅构建镜像,或者构建版本。

预发环境可以直接发全量发布,便于直接开始系统的体验测试,在测试通过后,就可以安排生产环境的灰度发布了。

五、环境流程建议

每个团队都有自己的开发测试流程和环境,请根据自身情况合理理解本篇内容。

传统开发模式下的开发测试流程在转移到微信云托管时需要有些变通,以下是一些建议:

1、开发环境:团队开发人员产出代码自测的环境,一般可以在本地PC开一个Docker容器挂载项目代码开发。容器镜像保证团队统一性,将极大的减少因为环境问题导致的联调失败。

2、测试、联调、回归环境:需要项目整体性的测试体验,在这里分形态来建议,项目形态上有 单一服务型 和 微服务 两种形态:

单一服务型:不管项目有多大,就一个服务运行,更新需要全部替换;这种情况下不建议将其放在微信云托管环境中联调测试,直接在本地测试和联调开发的效率会更高一些。因为只有内部业务互相调用,不涉及其他的服务(API接口、数据库、对象存储除外,本身属于外联通性)。

微服务形态:项目被拆分成不同的模块,每个模块服务独立运行,共同作用,更新只需要替换变更的;这种情况下建议放在微信云托管中测试,也就是变更的模块在经过测试,表现稳定的情况下,将其部署到微信云托管中,和其他服务一起做整体测试。

3、预发、生产环境:微信云托管中开单独的环境,如果需要预发环境连接生产环境数据库,可以设置两个环境内网联通,然后内网连接对应的数据库。

现在体验微信云托管,立享1个月免费额度:https://cloud.weixin.qq.com/cloudrun


小程序云开发技术专栏
云开发CloudBase官方技术专栏!微信 x 腾讯云联合提供的小程序·云开发服务,快速构建小程序、Web和移动...

云开发(Tencent CloudBase,TCB)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构...

422 声望
438 粉丝
0 条评论
推荐阅读
最佳实战 | 使用微搭低代码实现腾讯问卷满意度调查
1、在需要添加问卷的应用中(目前暂时只支持 PC/H5 应用),加入弹窗组件及打开问卷的按钮:2、新增点击时行为,选择页面跳转并将问卷的投放链接填入:3、最终预览并发布应用即可。

CloudBase云开发阅读 839

封面图
Native Wechat | React Native 微信 SDK
许多 React Native 开发者不具备原生开发能力,更不用提将他们的 App 对接到微信。尤其微信 OpenSDK 是一个令人头疼的东西,因为它的文档十分糟糕,里面许多的 API 并不清晰与直观。为帮助使用 React Native 的开...

HectorChong1阅读 445

国民级应用:微信是如何防止崩溃的?
导读 | 微信作为月活过10亿的国民级应用,经常面临特殊节点消息量暴增的问题,服务很容易出现过载。但微信的服务一直比较稳定,是如何做到的呢?本文邀请到了腾讯WXG后开开发工程师alexccdong以微信 2018 年发表...

腾讯云开发者1阅读 356

给大家准备了程序员专属红包封面,审核通过后我哭了,太心酸了(┬_┬)
大家好,我是小悟今天就是除夕了,也就是大年三十,小伙伴们应该都回家了吧,小悟祝大家新年快乐,身体健康,万事如意,兔飞猛进哦。春节临近,收到微信定制红包封面并送了四千个名额的邀请,就在想,自己去买名...

悟空码字阅读 934

封面图
抖音火爆的早安推送在线版,无需搭建代码,配置即可推送
抖音火爆的早安推送在线版,无需搭建代码,简单配置即可给心爱的他/她定时推送消息了只需通过简单的配置,无需自己搭建代码环境,申请各种api,甚至保持电脑程序开机等。配置完成后,即可实现每天定时配送。传送...

boboyoucan1阅读 706

不会写代码?也不懂技术?3分钟搭建电商cps系统搞副业
以前见面聊天,大家都习惯性会问“你吃饭了吗”,现在大家一出口就是“你阳了吗”。2023年元旦过去了,你还阳着么?不出意外的话就会出意外,小悟也已经中招过了,在家躺了六天,元旦前三天外加元旦三天假期,阳一次...

悟空码字阅读 502

封面图
关于视频号主页实现一键添加个人微信功能的思路
很多小伙伴私信说想要在视频号里面放置添加个人微信的按钮,但是很遗憾的告诉大家,想要实现这个功能是有条件的,就是需要视频号是企业认证的,个体户或企业都可以。个人视频号不可以,就算是已认证的个人号也不...

悟空码字阅读 426

封面图

云开发(Tencent CloudBase,TCB)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构...

422 声望
438 粉丝
宣传栏