OneDev是一个开源的一体化的DevOps平台,目前项目在GitHub上有3K星:https://github.com/theonedev/onedev。
做这个项目的初衷其实是想解决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,哪些人可以访问测试版本,哪些人可以进行版本发布等等。