作者|翟永超
周末的时候,收到好几个云服务器临近过期的通知短信,准备续个费,居然都要大几千!因为这几个都是以前低价抢购的,掐指一算,如果都续费的话,要蚕食好多利润!
作为一名自己养活自己的独立开发者,节省成本是必备技能,不然哪来可观的利润?于是,就开始琢磨着做一些架构上的调整,看看能否在这次服务器资源减少的情况下,继续低成本的运行目前还在跑的业务。
因为业务产品是最重要的,所以这块基本不能动。那么能动的就是一些周边设施了,比如:做任务管理、文档管理或持续交付的工具。在调研了诸多 SaaS 产品和云服务之后,最后选择了阿里云的云效全家桶。为什么最终选择了云效全家桶呢?核心原因还是“全家桶”三个字,基本上我想要的研发管理功能都能否覆盖了。那么这个全家桶具体能做什么呢?下面给大家分享下我改造前和改造后的平台结构,给大家一个直观的认识。
老架构的建立基本上借鉴了以前在公司里搭建基础平台时候所用的常用开源产品和商业产品,按功能来分,主要有以下这几个:
Gitlab 和 Jenkins 都是开源产品,免费且应用广泛,是大部分公司的散装方案中会囊括的。JIRA 和 Confluence 虽然是商业产品,但初级版本的认证只需要 9.9 美元,对个人和 10 人以下小团队还是非常友好的,由于 JIRA 强大的流程配置功能,可以将其作为整个研发管理平台的门户。
补充:有很多开发者对于 JIRA 只认为是一个任务管理的工具,不太了解 JIRA 的工作流功能,这里简单说明一下。JIRA 之所以强大,有很大一点就是得益于其强大的工作流配置功能。由于 GitLab、Jenkins 等这些工具都有 WebHook 或 JIRA 市场下的插件支持,我们就可以很方便的把这些工具的使用步骤串联起来。这样我们在软件研发过程中的业务需求、任务拆解、代码版本、构建部署等一体化过程都可以 JIRA 这样一个单一入口中来完成。
所用资源:由于之前抢购的各个服务器配置都不高,大多是 1C2G、2C4G 的。为了稳定运行就都做了分开部署,一共消耗了 4 台 ECS。
方案优点:
在决定使用云效全家桶之后,接下来要做的就是对老架构中用到的各个产品找到替代的解决方案。下面跟着我的调研使用步骤,来看看这一个个产品的对应关系吧!
代码仓库在云效的解决方案中是一个名为云效Codeup 的产品,产品地址:https://codeup.aliyun.com/ 。如果你跟我一样,是要做仓库迁移的话,非常简单。如下图所示,Codeup 为各种常用平台都提供了专用的导入方式,对 Git 管理不是特别熟悉的小伙伴也可以根据提示轻松的完成代码仓库的迁移。
在点击“导入代码库”之后,我们可以看到下图界面,基本上常用的一些 Git 管理平台都已经支持,选择你要迁移的源平台,然后根据官网文档,找到对应平台需要获取的认证方式做好配置即可。
在完成认证信息配置好之后,Codeup 就会从对应的平台获取所有项目仓库,接下来只需要逐个选择你要导入的仓库点击“导入”按钮,就能轻松完成代码的迁移。
这块比较简单,基本所有的 Git 管理平台都可以支持类似的迁移操作。也不算特别的亮点吧,光从代码管理上来说,主要贡献就是为这次的改造计划节省了一台 ECS。
完成了代码迁移之后,接下来开整持续集成部分,对应的产品是云效 Flow,产品地址是:https://flow.aliyun.com/。
在云效 Flow中创建 CI/CD 的流水线非常简单,因为它提供了各个主流开发语言的多种持续集成案例的配置模版。
这里我尝试了配置一个 Spring Boot 后端应用部署到 ECS 上,只需要选择上图中的第一个推荐模版。就会出现如下图的流水线配置界面,点击每个步骤都可以进行细节配置
点击每个步骤都可以进行细节配置,比如:如何用 maven 命令构建,如何上传制品
在部署操作上,因为与阿里云的结合,可以很方便的关联到账号下的资源来选择部署,所以你就不用自己维护服务器清单了,特别方便!
那么这个流水线功能是否能满足云原生应用一次构建多处部署的特性呢?下面我也尝试做了一下,大致流程就是:在 test 环境,做构建、上传制品、部署;在 pre 环境,做选择制品、部署;在 pro 环境,做选址执行、部署。模拟了一下这种比较常见的 CI/CD 管理流程。
如上图所示,是可以满足的。这也已经满足了我这边的持续集成要求。不过这里在流水线串联,想要实现选择制品这一步上,支持的用户体验还不是特别好,花了我一些配置和咨询的时间才完成。据悉这部分体验优化马上在 9 月 15 日版本也会优化!迭代很快,非常给力!
这里值得一提的是,在云效 Flow 中所提供的各种操作模版是非常适应于我们国内用户的,比如:可以看看我在 test 环境的流程细节,这里增加了代码扫描,里面就涵盖了阿里巴巴代码规约的检查报告等。
而对于通知提醒也是非常符合国内开发团队的管理特点,提供了钉钉、企业微信、飞书这些国内才常用的软件支持。
好了,通过云效 Flow,又帮我节省了一台 Jenkins 的 ECS。
在讲老架构的时候,我提到了使用 JIRA 的重要原因是要将其作为整个研发管理的门户,因为他可以整合其他所有周边设施。比如:任务的管理、持续集成的触发等等。那么在云效全家桶中,是否有扮演这样角色的产品呢?作为一站式的解决方案,必须得安排上,对应的产品就是 云效DevOps,产品地址:https://devops.aliyun.com/ 。
到这里可能你要问了,任务管理和文档管理这两个不替换了吗?必须替换!只是,因为作为门户的云效 DevOps 其实就涵盖了这两块内容。所以,接下来就一起看看云效 DevOps 的强大功能吧!
这款产品的上手非常快,因为它提供了一些常用模版。我这边就直接给予 DevOps 研发模版来创建。
完成创建后,不难发现菜单中的需求、迭代、任务、缺陷、测试计划、版本管理不就是JIRA的替代品么?而知识库不就是 Confluence 的替代品嘛!
这里还很贴心的提供了 Excel 导入的功能,所以我只需要从 JIRA 里导出 Issue ,然后在这里导入,就可以继续做之前的任务管理啦!
同时,作为管理门户,对于之前介绍的云效 Codeup、云效 Flow 自然也可以联系起来。只需要通过点击菜单中的代码、流水线(刚创建的时候,需要点击关联选择同账号下配置的代码仓库和流水线),就能进行查看和实现日常操作!
到这里,云效 DevOps 基本就完成在散装方案中 JIRA 和 Confluence 的角色,妥妥的继续释放出两台 ECS!
最后,盘点下这次从自己做的散装方案到使用云效全家桶之后,我认为比较大的几个收益点: