中国 DevOps 社区在最近两年期间得到了长足的发展,从最初的单一官网站点,发展到现在的社区官网、社区峰会官网、社区论坛、社区微信公众号和社区服务号等多种对外公众界面。在这些网站平台之后的是 20 多位社区志愿者们的辛勤工作和贡献。
社区官网最初是在 GitHub 上通过 Github-page 的免费空间发布的,在购买了收费的 Hugo 模板之后;网站的代码有了转为私有仓库的需求,因此CODING就从 GitHub 迁移到了 GitLab;当时 Github 还没有免费不限数量的私有仓库,而且 Github 也不能免费实现 20+ 社区代码贡献者的组队维护多个项目。GitLab 总的来说能满足目前的所有社区开发和协作需求:这些需求包括无限私有仓库,足够数量的代码协作人员,免费的 CI 构建和发布功能。GitLab 平台也可以实现 GitLab-page 的静态网站托管服务,但是,如果代码仓库设置为通过 page 实现静态网站发布的情况,需要整个代码库设置为对外公开访问,而这与代码库本身依然需要保持私密矛盾。因此社区的小伙伴也无奈的在 GitLab 上维护代码,然后将 hugo 构建后的结果再发布到 Github-page 的项目去。
根据以上社区网站代码库迁移的经历,下面总结一下中国 DevOps 社区在网站开发维护和配套 CI/CD 方面的总体需求:
- 实现多人(20+志愿者)私有和共有代码仓库的协作,相关工作包括社区网站内容维护和新功能开发,社区书籍和技术白皮书协作翻译等。
- 实现 OKR 风格的社区网站开发相关工作管理,季度目标制定,任务跟踪等。
- 实现 Scrum 风格的软件项目计划、分配和跟踪;统一规划开发和运维相关的所有任务;与季度 OKR 相关联。
- 实现自动化的 CI、CD 流水线。
- 自动化和快速的部署软件项目工件(Artifacts)到腾讯云服务器(和其它相关服务),包括静态网页到 Nginx 服务器的发布,到云存储的发布,目前也可能即将会用到 K8s 服务/Serverless 服务的发布。
基于目前社区的相关工作需求,我们在三个平台之间进行了综合的对比和评测:GitLab(免费版)、Jira Cloud(免费版) 和 CODING - 高级版(腾讯云 DevOps 平台服务)。总的来说我们需要一种能满足以上所有需求的、集成化的 DevOps 工具 SaaS 平台服务。
在开始 DevOps 平台选项之前,值得再次研究一下上面这幅图。重申一下,这幅图表达了两个意思:
- DevOps 是持续不断的循环,并不是单向的多少次重复的流程。理想情况下一次循环对应着敏捷开发的一个迭代,每个迭代 done 的定义并不是编码完成就结束了,还包括后面的测试和运维的所有工作,应该管理到从开发到上线过程中的所有工作。本次迭代的结果可以作为下一个迭代的输入之一。
- DevOps 工具平台需要支持的每一次循环中包括的阶段有:计划、构建、持续集成、部署、运维、持续反馈(监控);如果某个阶段无法直接实现,用其他独立工具实现也不是不可以,例如持续监控阶段(但是监控的状态必须实时透明的反馈给DevOps循环中的所有人)。
下面我们分阶段的描述以上三个 DevOps 工具平台的实际结果,每个阶段中会提出不同的功能需求点,然后横向比对三个工具的优缺点。声明这里是基于中国 DevOps 社区的实际需求做出的工具平台的需求使用体验调研,这些调研结果决定了最后平台选择的决定。
计划 - Plan
OKR 管理 : – 传统的社区项目规划往往是技术导向,或者比较就事论事的安排某些开发和维护工作。而中国 DevOps 社区更希望能应用高于项目本身一个层级的 OKR 概念来统筹所有项目的工作。需要用一个顶级目标对应多个KR,每个 KR 能关联到不同项目中的各种工作,也需要能跟踪孤立的 KR。
- GitLab :在 Gitlab 官方文档和网上并没有查到的 OKR 的实现方式。
- Jira Cloud:默认云服务没有 OKR 的功能,不过可以通过两种方式实现:安装第三方 App,使用 Structure 功能扩展实现。实际测试了一个名为 OKR for Jira (by Digital Toucan)的 App;能满足需求。在 OKR 关联界面中可以关联项目 issue,在 issue 的界面里也可以关联 KR;实现双向关联和跟踪。
- CODING:在团队管理页面的‘团队目标’功能里有内置的 OKR 管理功能。功能性完全满足社区需求。可以在一个平面的可折叠页面中管理大量的 OKR 条目。O 的完成进度可以根据 KR 的进展自动计算,KR 的完成度可以手工拖到,也可以根据所连接的项目状态自动计算,所有条目的排序可以自由拖动。操作简洁方便。在项目工作的界面里不能关联到 OKR。
下图是 OKR for Jira 免费 app 的截图:
下面是 CODING 中管理 OKR 的界面截图。
项目规划/协同 : – 社区网站相关工作需要在每一个项目的执行过程中实现需求分析、工作分解、工作分配和进度追踪等功能。并不需要实现高级的企业产品路线图和Eprics的管理,由于并不开发复杂的商业产品,至少目前工作的复杂度没有这个需求。
- GitLab:项目管理功能齐全,而且包含可定制的看板功能(Scum board / Kanban board),里程碑和 Todos 也是比较特色的功能。具备Issue 状态和代码PR 自动化的关联。
- Jira Cloud:默认项目管理丰富,Issue 的默认查看视图有多种方式支持各种看板。Issue 的查看、编辑和相关操作非常符合开发者视角的思路,可以从 Issue 上一键式的创建分支,并且看到分支代码提交、构建和部署的各种状态。
- CODING:支持项目中的 Backlog 规划,管理迭代、Epric、需求、任务和缺陷。它可以很方便的定制每一种工作的状态和工作流,特别符合国人默认流程定制的需求。支持项目中的模块管理。操作比较简洁直观可用。一个项目中可以容纳和管理多个代码库。
下面是 CODING 中管理项目协同中的任务管理,虽然没有看板展示的模式,不过用拖拽的方式可以方便的对 Backlog 中的工作条目做迭代规划,点击每个工作条目都可以对其进行编辑修改。
构建 - Build
代码托管 : 社区需要使用 Git 代码仓库管理各种网站和应用的代码开发,包括markdown 格式的网站内容更新,主要是用基于主干的开发,或者部分功能分支的方式。
- GitLab:功能强大和丰富的代码仓库管理,支持丰富的合并请求(MR)策略。
- Jira Cloud:通过 bitbucket 实现代码仓库管理。从源码到提交、分支、PR 等等都可以关联和跳转。
- CODING:虽然不是老牌的 Git 仓库工具,它可以支持 git 和 SVN 仓库。能满足代码的提交、分支、合并请求、版本、对比等功能。功能完全满足需求。
云端开发工具 : 如果开发者在不能访问自己的工作电脑的情况下,还是需要可以访问到一个功能齐全的线上代码编辑环境。确保社区参与者能够容易的参与相关开发工作。
- GitLab:代码库中的每个文件都可以通过 Web IDE 功能打开,能实现代码的语法检查、提交变化提示、Markdonwn 编辑/预览等功能。具备一定的可用性。
- Jira Cloud:在 bitbucket 中选取文件点击编辑后,能进入一个基本的文本文件编辑模式。无其他高级功能,很难胜任稍微复杂一些的程序代码变更。
- CODING:代码库中的代码文件可以支持在线的编辑,具有一定的语法加亮和变更对比功能,能提供基础的线上开发能力。同时还提供了全功能的线上 IDE 环境 https://cloudstudio.net/,这个功能很类似于一个线上版本的 vs code,它可以拉取 git 仓库地址,并在与之的多种语言环境中开展代码开发工作。
代码检查 : 在尽可能的提供代码质量扫码、评估和反馈会对每个社区开发者的工作质量提供帮助,需要帮助社区小伙伴们开发出高质量和安全的社区网站代码。
- GitLab:可以集成第三方的代码扫码服务,在 CI 的过程中调用第三方服务实现。
- Jira Cloud:同上。
- CODING:内置了一套简洁的代码扫描功能,可以针对不同的开发语言定制各种代码扫描方案,实现代码检查、质量评估、路径过滤等功能。扫描结果可以生成在总体概览视图报表和任务管理清单。
下图是一个代码扫描方案编辑示例。
私有制品库/镜像仓库 : 随着后期复杂社区项目的开发,以及容器化和微服务化的趋势。需要使用轻量的解决方案予以满足。
- GitLab:为每个项目提供包管理(支持通用、Conan、Maven,NPM、NuGet、PyPi)和 Docker 镜像仓库。满足在一个内的制品管理。
- Jira Cloud:需要集成第三方的服务实现。
- CODING:为每个项目提供了各种类型的制品仓库,包括:Generic、Docker, Maven, NPM, PyPi, Helm, Composer, NuGet, Conan。可以设置项目内、团队内和公开的访问范围权限。
编译构建 : 需要提供自动化的编译构建能力,通过自动化的 CI 流水线给开发者快速的反馈,提供友好的 DevOps 流水线构建和修订界面。平台提供免费的构建算力,能够按需要自行接入构建节点和 K8S 环境。
- GitLab:提供基于 gitlab-ci.yml 文件的 Pipeline as Code 的流水线管理模式。无流水线的图形编辑界面。可以通过部署 Runner 的方式扩展构建环境到外部的服务器上,或者 k8s 的环境中。
- Jira Cloud:在 Bitbucket 中提供基于 bitbucket-pipelines.yml 文件的 Pipeline as Code 的流水线管理模式。无流水线的图形编辑界面。这个流水线的后台应该是一个共享的基于 Bamboo 的SaaS 服务,还没有发现扩展这个部署环境的方法。
- CODING:提供基于 Jenkins 的 CI 服务。也就是说 CODING 服务用套娃的方式包装了 Jenkins 服务,通过共享的构建服务提供基础的构建算力,如果需要的话也可以和 GitLab 一样扩展到外部的构建服务器或者 K8s 服务集群。这里 CODING 还提供了 构建服务到腾讯云的相关服务的集成。因此它能提供 Jenkins+ 的服务能力,对于 Jenkins 服务的构建能力这里就不在赘述。由于 Jenkins 流水线技术比较普及。社区的同学用了半天的时间实现了社区官网构建发布流水线的调试。将基于 Hugo 的网站构建结果用 ssh 命令的方式发布到腾讯云里的 Nginx 服务器的目录中。
下图是在图形流水线编辑器中对标准模板的调试,这里简单的实现了构建和打包的过程,在部署的步骤里,通过远程 ssh 的命令实现了对网站发布包到腾讯云虚拟机的部署。
总结
以上是中国 DevOps 社区对 DevOps 工具平台服务的选型测试过程的一部分总结,这里仅仅从社区的实际工作需求出发,通过试用对比的方式探索了几种平台。总的来说腾讯的 CODING 平台使用体验要好于其它两个服务。具体说有以下几个方面:
- CODING 的页面访问速度非常快,由于是相对比较年轻的产品,目前它比起 Jira 和 GitLab 还处于婴儿期;因此这种够用就好的阶段也降低了对复杂高级产品的认知难度。通过 git 命令下载和提交代码的速度非常快。
- OKR 的管理功能具备够用的可用性。
- 流水线功能同支持图形的流水线编辑和自控制的 Jenkins 文件。如果已经具备了一定的 Jenkins 能力,你就能快速上手开始构建和部署项目了。这个界面整合良好的套娃服务其实还具备了一定的可迁移性。
- 与腾讯云服务的良好互访问性。如果已经使用了腾讯云的服务,那么 CODING 的部署流水线将对其非常友好,易于衔接已有资源。
后续还将按需测试和对比 DevOps 循环中的其它阶段。如果你也感兴趣参与中国 DevOps 社区的相关志愿者开发工作,请随时和我联系。也希望对此感兴趣的小伙伴能报名参与我们的这种主题评测活动。