OneDev 是一个开源的一体化的 DevOps 平台,目前项目在 GitHub 上有 3K 星:https://github.com/theonedev/…。
做这个项目的初衷其实是想解决 Build,Issue 和 Code 之间的信息割裂问题的。比如说在一个测试版本发布后,这个版本里包含那些需要测试的 Issue,或者某个 Issue 最早在那个版本里被解决,又或者比较任意两个发行版本,得到所有源代码的改动等等。要方便的整合这些信息,使用一体化的平台很有必要。当初也研究了 GitLab,但是觉得这家公司太过于利润导向,特别热衷于加新功能,而对已经存在的呼声很高的问题却经常视而不见,比如说代码的多行注释一直不支持,.gitlab-ci.yml 难以维护,runner 经常莫名其妙失败等。而 GitHub 企业版又太贵,消费不起。况且它们在 Build,Issue 和 Code 的整合方面也不像想象中那么顺畅。
因为一直做 Git 相关的开发工作,觉得做个简化版的 GitHub/GitLab 的 Copy Cat 应该不是很难,而且公司内部使用,大家低头不见抬头见,不需要那些骚气的社交功能如邀请,关注之类的,而是把精力放在直接提高生产力的功能上,比如代码智能导航,Build 定义的图形界面和智能提示,Pull Request 增量审查,对 Docker 和 Kubernetes 原生支持等等。随着用户的持续反馈和迭代,OneDev 目前已经相当成熟和稳定,可以在很大程度上取代 GitLab,而且安装维护简单,资源占用少,性能出色。具体文档参见项目主页。
好了,说了这么多废话,还是看看我们做了哪些特色功能吧。
原生支持 Docker 和 Kubernetes
内置持续集成引擎,可以直接在本机上用 Docker 跑 Build,也可以连接到 Kubernetes 集群上进行大批量的 Build。
图形化的 Build 定义界面
在使用 GitHub/GitLab 等其他工具定义 Build 行为的时候,需要写 Yaml 脚本,不可避免的要去了解复杂的 Build 定义规则。而在 OneDev 里提供了图形界面,并辅以自动提示,让这个工作变得非常容易。而且日后在版本升级时,Build 定义也可以自动升级。
灵活的 Build 工作流定义
支持用变量控制 Build 行为。对不同变量的组合分别进行 Build/Test。可以将不同的 Build 任务连接形成 Build Pipeline,并支持并发任务。
支持 Issue 状态和字段自定义
按需要自定义 Issue 状态和字段来满足不同的应用场景。不同字段之间可以定义依赖关系,比如说可以指定某字段只有在另一个字段选取特定值的时候显示。Issue 状态可以设置基于规则的自动迁移,也可以设置基于权限的手动迁移。
自动刷新的 Issue 看板
根据 Issue 状态或者字段来展示 Issue 看板。所有 Issue 相关操作都可以在看板中进行。看板即时自动刷新来展示 Issue 的最新状态。
代码智能搜索和导航
在查看源文件和 Diff 时,支持基于语法分析的代码智能搜索和导航,并可以展示源码的大纲结构方便阅读。目前支持 Java,JavaScript,C,C++,CSharp,Go,PHP,Python,CSS,SCSS,LESS,R。
使用标注对代码进行讨论和阅读
阅读代码时,随时可以加上标注同作者进行讨论。之后即使文件经过了修改或重命名,OneDev 依然能够把合适的历史标注显示代码旁帮助理解。
灵活的代码审查规则
制定基于 Pull Request 的代码审查规则。比如说可以规定某个分支的某些文件修改后需要通过哪些人的审查,或者哪些 Build 任务必须通过等等。
强大易用的查询语言
系统包含有一个精心设计的查询语言,通过自动提示和补齐,可以快速创建对 Issue,build,code,pull request 等对象的复杂查询。查询还可以按需保存和订阅,以便在有满足查询条件的事件发生时,自动得到通知。
Code,Issue,Pull Request 和 Build 的深度集成
在代码提交,Pull Request 创建 / 合并,或者 Build 成功后,可知配置相关的 Issue 自动转移到所需状态,并通知相关人员。随时获取交叉信息,比如某个 Build 里包含那些完成的 Issue,某个 Issue 最早在那个 Build 里被解决,又或者比较任意两个 Build,得到所有源代码的改动等等
精细的权限控制
比如您可以定义哪些人可以改动关键源文件,哪些人可以分配 Issue,哪些人可以访问测试版本,哪些人可以进行版本发布等等。