作为一名开发者,每加入开发一个新项目,或者接手老项目也好,避不开需要搭建开发环境。开发环境的搭建避不开两个重要环境,语音环境搭建和网络环境搭建。以Nodejs开发的服务为例,本人在CSIG的DNSPod相关的Nodejs服务开发过程中,需要依赖腾讯云官网的各种不同环境的接口来完成业务,如登录态校验,CAPI等,还需要依赖Redis进行开发。在依赖devcloud开发机,使用本地开发服务,几乎不可能。因为本地办公网络与后端服务网络不通,需要搭建跳板机等手段来实现互通。整体的开发成本很高,希望有一套完善的方案来解决网络问题,以及降低搭建环境成本。 另外在疫情反复的环境下,随时在家隔离、居家办公;办公电脑忘记携带遇到紧急问题,同时自家电脑不具备开发环境的情况下,可能导致的无法顺利继续开发工作的情况,希望有一个方案能支持在这种特殊或者极端的情况,依然能继续完成开发工作的方案。
收集中心各个业务Nodejs服务的开发情况,得出以下结论:
总体来说,本地开发或者自行搭建开发机是可行,但是部署开发环境的人力和费用成本较高,在降本增效的前提下,当前的方案并非最优选。到这里其实优化的目标已经非常明确了,新的方案需要满足以下诉求:
对于接入Coding CI的过程中,留意到Coding CI提供一个非常好的远程开发工具Cloudstudio,Cloudstudio是基于容器化的远程vscode服务。通过与工蜂关联,能实现在工蜂创建开发分支时,自动创建对应的工作环境。经过一段时间的调研和试用,总结Cloudstudio具备以下特性:
更多的信息可查看文档链接:远程开发
首先远程开发的配置与Coding CI一致,那么可以通过配置统一的远程开发配置模板,通过include的方式集成到项目中。并且对于远程开发配置模板的变更对于业务项目无感。可实现一处修改处处生效。
通过在项目中的.orange-ci.yml中引入远程的远程开发配置文件完成依赖:
定义远程开发模板统一配置:
# 远程开发
(**):
branch.create:
- name: vscode
services:
- git-clone-yyds # 实现秒级克隆
- vscode # 声明使用 vscode
- docker
docker:
build: .tide/Dockerfile
endpoints:
- 9527
wework:
title: TIDE远橙开发
stages:
- name: 设置host
script:
- cp /etc/hosts /etc/hosts.back
- if [ -f "./tide/hosts" ]; then cat ./tide/hosts >> /etc/hosts; fi;
- name: 执行自定义脚本
script:
- npm install
- name: ready
type: vscode:go
远程开发模板会默认完成一些常规步骤:
大致流程如下:
为了降低开发者使用远程开发,单独封装了一系列的不同语言以及不同版本的开发环境镜像。并且封装了一个集成常用的vscode插件的vscode-plugin-image,提高开发者的开发体验。
开发者可以根据项目的实际情况,在项目中的.tide/Dockerfile编写相应的扩展镜像的命令,从而达到灵活的扩展能力。
默认提供一些常用的vscode插件,通过组合镜像构建的方式,最终生成的开发镜像可以根据语言和语言版本的维度,分别构建对应开发环境镜像,并且内置一些vscode service依赖的linux软件、开发常用软件以及vscode插件等。
经过上面的统一开发环境镜像设计,以及Coding CI的公共模板继承策略,开发者只需要在已经授权了Coding CI的项目中,添加include对应tide.yml模板(远程开发模板)。只需1分钟,即可完成远程开发能力的接入。
通过创建分支,即可自动开始创建远程开发环境:
基本上中心Nodejs服务所依赖的后端测试环境网络通畅,并且得益于vscode service的能力,可以通过web浏览器打开或者本地vscode远程连接。并且方便完成各种调试断点,极大的提升开发调试BUG的效率。
当我们vscode断开连接,或者web编辑器关闭后,默认10分钟内系统将会回收分配的工作空间;并且在销毁前如果代码并没有提交到远程仓库,cloudstudio将会自动帮你提交一个commit到远程分支。并在下一次启动远程开发时自动将代码还原到新的工作空间中。
Cloudstudio以面向Git仓库的方式,实现分支即环境的理念,并以声明式语法通过Coding CI进行集成。同时解决因为网络环境复杂,导致无法在本地进行有效开发所带来的痛点。值得一提的是,基于容器化技术,将开发资源做到按需化,能很好的起到降本的作用。
这一些都是个人开发机难以做到的事情,在经过一段时间使用和团队的推送试用,明显感觉到这种便捷高效的开发模式,才是未来日常开发该有的样子。
Coding CI文档链接:http://oci.woa.com/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。