国人自研开源项目,一款简单易用的 GitLab 替代品

2023-11-14

公众号关注 “GitHubDaily”

设为 “星标”,每天带你逛 GitHub!


今天跟大家介绍一个国人自研项目,可用做 GitLab 替代品。

PS:本文来自作者本人投稿

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,哪些人可以访问测试版本,哪些人可以进行版本发布等等。

---

由 GitHubDaily 原班人马打造的公众号:GitCube,现已正式上线!
接下来我们将会在该公众号上,为大家分享优质的计算机学习资源与开发者工具,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

国人自研开源项目,一款简单易用的 GitLab 替代品 的相关文章

  • torch.hub.load()解析,如何加载本地权重

    用yolov5训练了一个权重 项目只能部署在本地 官方文档 torch hub load repo or dir model args source github force reload False verbose True skip v
  • Python 第一阶段

    第一章 安装 1 1 开发环境 官网 https www python org稳定版 Stable Releases检验 cmd 命令 python version 1 2 开发工具 PyCharm官网 https www jetbrain
  • (Struts2学习篇) Struts2配置文件之 struts-default.xml

    对struts default xml的一些注释
  • zmq+protobuf 的坑点难点

    zmq protobuf 的坑点难点 之前项目要用到zmq protobuf的方式传递数据 软件采用前后端分离的方式开发 其中前端是异地同事用python开发的 后端是我们这边用C 开发的 1 中间有遇到问题是前后端传送zmq信息时 发现字
  • DRM驱动(七)之atomic_commit

    上节已经把应用的参数check了一遍 这次就可以把对应的参数配置到硬件里进行刷图操作了 int drm atomic commit struct drm atomic state state struct drm mode config c
  • Qt 控制台运行无法弹出小黑框

    Qt Console Application Qt 主要是GUI界面的设计 但在学习的时候控制台运行显得更加方便一些 小编在第一次新建控制台运行的时候 点击运行没有弹出小黑框 解决方法 主要是因为没有执行qmake 就需要在Qt的pro文件
  • RocketMQ 用法详解,你学会了吗?

    大家好 我是指北君 消息中间件是我们工作中使用最频繁的一类中间件 它具有低耦合 可靠投递 广播 流量控制 最终一致性等一系列功能 成为异步RPC的主要手段之一 当今市面上有很多主流的消息中间件 如老牌的ActiveMQ RabbitMQ 炙
  • C++的使用小教程2——基于范围的for循环

    C 的使用小教程2 基于范围的for循环 1 常规的for循环 2 基于范围的for循环 在学习了python之后 一直觉得python的语法很方便 特别是python中遍历数组的方式 无需配置特别的参数就可以完全遍历 C语言是很难实现的
  • zookeeper和Eureka

    简介 Zookeeper 主要为大型分布式计算提供开源的分布式配置服务 同步服务和命名注册 曾经是Hadoop项目中的一个子项目 用来控制集群中的数据 目前已经升级为独立的顶级项目 很多场景下也用它作为Service发现服务解决方案 Eur
  • freessl生成免费ssl

    利用freessl免费生成https https freessl cn acme deploy 官网说明地址 https blog freessl cn acme quick start 下载acme工具包 curl https get a
  • 拟合是什么意思

    在机器学习和统计学中 拟合 Fitting 是指使用模型来适应数据的过程 它表示通过对模型参数进行调整 使模型能够最好地拟合给定的数据集 当我们说一个模型 拟合 了数据时 意味着该模型通过学习数据的模式和结构 能够产生与实际观测数据相匹配的
  • Spring Cloud Alibaba之配置管理组件 - Nacos

    TOC 使用Nacos管理配置 为什么要需要配置管理 在微服务架构中 每个微服务都有可能会存在多个实例 为了保证同一微服务不同实例的配置文件内容一致 我们就需要有一个服务可以对微服务项目的配置文件进行统一管理 通常我们将其称之为统一配置管理
  • Qt系列文章之 QDataStream

    上一篇文章介绍了如何使用QFileDialog来选择文件路径并读入项目界面 本文介绍如何使用Qt的序列化技术来将用户定义的一些变量保存到文件 用到的主要模块是QDataStream 对象序列化 QDataStream Qt提供了两个关键的二
  • 【STM32】HAL库实现定时器多通道输入捕获频率

    原理说明 捕获信号的频率其实有很多中实现方式 外部中断 输入捕获 使用外部时钟计数器等 对STM32有一定了解的朋友们在测量频率的问题上往往都会想到利用输入捕获 输入捕获的方式在中低频率段 1HZ 200KHZ 的测量还是比较准确的 在高频
  • Qt如何画圆或椭圆 QPainter

    paint gt drawEllipse 20 20 210 160 将圆或椭圆框在一个矩形中 括号中的四个参数指定矩形的参数 左上角坐标 20 20 宽高为 210 160 更新 这里的paint类型为QPainter 画椭圆 该椭圆内切
  • 字符设备驱动框架及测试程序

    字符设备驱动框架及测试程序 1 驱动框架 1 1 驱动文件 my cdev c 1 2 Makefile 2 驱动测试程序 2 1 测试文件 my cdev test c 2 2 Makefile 3 测试结果 全程打开dmesg 3 0
  • 新技术前沿-2023-基于Stable Difussion体验AI绘画

    Stable Diffusion 入门简明教程 耗时80小时 超详细的胎教级Stable Diffusion使用教程 看这一篇就够 基于ChatGPT Stable Diffusion实现AI绘画 1 简介 近年来 AI生成内容 AIGC
  • vue的优缺点

    Vue js是一个流行的前端JavaScript框架 它具有许多优点和一些缺点 下面是Vue js的优缺点 优点 1 易学易用 Vue js具有简洁的API和清晰的文档 使得学习和使用它非常容易 尤其对于有一定JavaScript和HTML
  • 用公网ip能访问,用域名不能访问

    用公网ip能访问 用域名不能访问 是缓存导致的吗 现象 如果您遇到这种现象 1 域名解析正确 通过花生壳动态域名客户端的域名诊断 看到自己的域名解析是正确的 或者通过Oray网站的域名管理界面 看到域名的A记录和服务器实际的公网ip一致 下
  • 谁看见我的猫照片了

    今天分享一个可自由拖得动的图片效果样式 先看效果 谁看见我猫的照片了 再上源码

随机推荐

  • python 分支结构编程 请用一行代码,编写一个回声程序,将用户输入的内容直接打印出来。

    python 分支结构编程 第一题 请用一行代码 编写一个回声程序 将用户输入的内容直接打印出来 示例 代码 print input 运行结果
  • MA模型简介及其相关性质

    文章目录 1 概述 1 1 定义 1 2 限制条件 1 3 中心化 M A q
  • 课时 16 自测题

    以下说法错误的是 单选题 A etcd 是一个商业软件 B etcd 使用 go 语言编写 C etcd 是一个分布式系统 通常由多个 server 组成一个集群 关于 etcd 重要时间节点 以下说法错误的是 单选题 A etcd 最初由
  • react 初级基础

    react基本使用 项目创建 项目的创建命令 npx create react app react basic 创建一个基本元素进行渲染 1 导入react 和 react dom import React from react impor
  • 竞赛 交通目标检测-行人车辆检测流量计数 - 竞赛

    文章目录 0 前言 1 目标检测概况 1 1 什么是目标检测 1 2 发展阶段 2 行人检测 2 1 行人检测简介 2 2 行人检测技术难点 2 3 行人检测实现效果 2 4 关键代码 训练过程 最后 0 前言 优质竞赛项目系列 今天要分享
  • 函数或变量 x 无法识别。_这个变量陷阱,连高手都躲不开

    点击上方 Python小白集训营 选 星标 公众号 重磅干货 第一时间送达 图 Pexels 日期 2021 1 2 你可能会好奇 是什么样的陷阱 连高段位的python选手也会频繁踩坑 讲这个topic前 先来讲一个例子 这是我前几个月在
  • 【华为OD考试真题】报数游戏(Python实现)

    前言 考试题目大同小异 练习真题是通过考试的捷径 思路仅供参考 如果有更好的思路 欢迎一起交流学习 创作不易 文章若对你有帮助 点个关注 谢谢 题目描述 100个人围成一圈 每个人有一个编码 编号从1开始到100 他们从1开始依次报数 报到
  • 利用LSB算法隐藏图片信息的MATLAB实现

    前一篇博客中介绍了利用LSB算法隐藏文字信息的MATLAB实现 http blog csdn net csdn moming article details 50936687 在此基础上 下面介绍利用LSB算法隐藏图片信息的MATLAB实现
  • Mt2015 lfsr

    Taken from 2015 midterm question 5 See also the first part of this question mt2015 muxdff Write the Verilog code for thi
  • python:使用unquote对url解码

    参考 python之urlencode quote 及unquote wf592523813的博客 CSDN博客 python unquote
  • 企业架构成功之道读书笔记

    企业架构成功之道读书笔记 原文 https www leanix net en enterprise architecture 企业架构成功之道 理解下一代企业架构的价值 降低成本 应用合理化 速赢 10 软件授权优化 项目合理化 应用下线
  • 图形视图(17):【类】QGraphicsWidget[官翻]

    文章目录 详述 公共类型 enum anonymous 属性 autoFillBackground bool focusPolicy Qt FocusPolicy font QFont geometry QRectF layout QGra
  • final定义类、方法、属性以及多态性

    1 在Java中final称为终结期 在java里面可以使用 不能有子类 2 使用final定义的方法不能被子类覆写 3 使用final定义的变量就成了常量 常量必须在定义的时候设置 多态性基本概念以及相关的使用限制 多态性的依赖 转载于
  • Sentinel客户端调用并发控制

    前言 当链路中某个应用出现不稳定 导致整个链路调用变慢 如果不加控制可能导致雪崩 这种情况如何处理呢 一 慢调用现象分析 在分布式链路中调用中 调用关系如下 methodA1与methodA2在同一个应用中 链路标号 调用链 链路1 met
  • luajit官方性能优化指南和注解

    luajit官方性能优化指南和注解 luajit是目前最快的脚本语言之一 不过深入使用就很快会发现 要把这个语言用到像宣称那样高性能 并不是那么容易 实际使用的时候往往会发现 刚开始写的一些小test case性能非常好 经常毫秒级就算完
  • 怎么解决Greenplum中用pg

    基本思路是为ns1 table1设置分布策略 root登陆master host切换到Greenplum的管理员用户 比如gpadmin su gpadmin使用psql连接数据库 psql databasename设置随机分布策略alte
  • 超好玩地铁跑酷游戏,内涵源代码

    直接上代码 include
  • java的多重循环和程序调试

    java的多重循环和程序调试 一 掌握Java二重循环 多重 嵌套 注意 1 外层循环控制行 内层循环控制列 每行打印的内容 2 外层循环执行一次 内层循环执行一遍 3 一般多重循环值的就是二重循环 二 使用跳转语句控制程序的流程 retu
  • 在线Plist文件格式转Json文件格式

    Plist文件是一种用于存储应用程序配置信息的文件格式 其中包含应用程序的各种设置和数据 在过去 Plist文件通常是以 plist 格式存储的 然而 随着时间的推移 人们开始使用 JSON 格式来存储更复杂的数据结构和数据 如果您需要将
  • 国人自研开源项目,一款简单易用的 GitLab 替代品

    公众号关注 GitHubDaily 设为 星标 每天带你逛 GitHub 今天跟大家介绍一个国人自研项目 可用做 GitLab 替代品 PS 本文来自作者本人投稿 OneDev 是一个开源的一体化的 DevOps 平台 目前项目在 GitH