如何用 OneDev 搭一套自托管 Git 服务器与开源 CI/CD 平台【免费下载链接】onedevThe Unified and Autonomous Development Platform项目地址: https://gitcode.com/gh_mirrors/on/onedev先说个故事。去年我们团队有七个人代码托管在 SaaS 平台上构建走另一家的免费额度看板再用第三家的工具。每个月总有一两天在工具之间浪费时间仓库权限要在一处配流水线变量要在另一处填需求的卡片状态还要手动同步。更要命的是一旦 SaaS 服务抖动或调价我们连个备份方案都没有。折腾了大半年我把目光转向了自托管方案最终落在了 OneDev 上——一个把 Git 仓库管理、CI/CD 流水线、问题看板合并进同一套二进制里的开源项目。这篇文章不吹功能清单只讲我实际把它跑起来、用顺手的全过程以及新手最容易踩的坑。一句话说清楚它是什么OneDev 是一款开源的自托管 Git 服务器同时内置开源 CI/CD 平台和项目管理能力官方定位是统一且自治的开发平台The Unified and Autonomous Development Platform。翻译成大白话你用一套服务就能完成代码托管、自动构建、需求跟踪数据全部留在自己的服务器上不给第三方交保护费。和 GitLab、Gitea、拼装式自建比差别在哪选自托管方案绕不开三句话部署要简单、功能要够用、后续别给自己找麻烦。我把常见路线的真实体验对比了一下方案部署成本功能完整度上手难度一句话点评GitLab较高官方镜像较重内存起步要求高极全但很多能力要订阅中等配置项多功能全面但体量偏重Gitea低单二进制即可跑偏代码托管CI 需要外接低轻量但流水线和看板要靠拼装Gitea Jenkins Redmine 拼装低但要多维护几套服务各自为政靠脚本衔接高维护成本藏在长期运维里OneDev低一个容器或单进程托管 CI/CD 看板一体低开箱即用且整体资源占用小我的选择建议很直接如果你只需要一个轻量 Git 托管Gitea 足够如果团队预算足、爱折腾GitLab 也行但如果你和当时的我一样想让仓库、流水线、看板真正长在一起而不是拿胶水粘起来OneDev 是性价比最高的那条路。它官方宣称 1 核 2G 内存就能跑中等规模项目实际体验下来确实比 GitLab 轻不少。用 Docker 把它跑起来5 步能 push 上第一个仓库OneDev 官方提供 Docker 镜像这也是我最推荐新手的方式。它默认依赖内嵌数据库单机场景下不用额外装任何东西。第 1 步准备目录并拉取镜像mkdir -p onedev/site docker pull 1dev/server第 2 步启动容器docker run -d --name onedev \ -p 6610:6610 -p 6611:6611 \ -v $(pwd)/onedev/site:/opt/onedev \ -v /var/run/docker.sock:/var/run/docker.sock \ 1dev/server解释一下两个端口6610 是 Web 界面HTTP6611 是 SSH 端口push/pull 代码走它。挂载/var/run/docker.sock是为了让服务能在容器里调度 Docker 执行构建任务如果你暂时不跑 CI这一步可以先不挂后面补上重启即可。第 3 步初始化打开浏览器访问http://服务器IP:6610跟着引导设置管理员账号和服务地址。这一步和大多数 Git 服务器的初始化差不多全程不到两分钟。第 4 步验证——创建仓库并 push新建一个项目按页面提示把远程地址填进本机 git 配置git remote add origin http://服务器IP:6610/用户名/项目名.git git push -u origin main能看到 push 成功说明这台自托管 Git 服务器已经活着了。注意 push 走 HTTP 时如果遇到 401多半是账号或权限没配对先去后台确认自己属于该项目的写权限组。第 5 步可选接上外部数据库如果你打算让团队长期使用、或者后面要扩节点建议参考 server-product/docker/docker-compose.yaml它给出了 OneDev PostgreSQL 的组合编排把数据独立出来避免内嵌数据库被容器生命周期绑死。跑通这一步你的团队就正式拥有了一块完全可控的代码阵地——想加 SSH key、配保护分支、挂 Webhook全在自己的服务器上说了算。三个容易被忽略、但真能省时间的功能工具的价值不取决于它有多少功能而取决于你实际用到了哪几个。下面这三个是我用下来收益最大、却最容易被忽略的点。1. 代码管理任何一次提交里的符号搜索与导航大多数 Git 平台只提供全文检索OneDev 额外做了语言感知的符号搜索可以在任意一次提交上直接跳转类、方法定义和调用位置对老代码和大型仓库特别有用。Code Review 时不用再切回本地 IDE 查上下文直接在 Web 界面就能把一段改动的来龙去脉看明白。在任意提交上直接跳转符号定义Review 老代码不再需要开 IDE2. 流水线可视化编辑器 实时 Web 终端调试OneDev 的 CI/CD 编辑器是可视化拖拽式的新手不用先背 YAML 语法就能搭出多阶段作业和依赖关系。但真正让我惊喜的是它的调试手段构建过程中可以直接打开 Web 终端进入执行环境看实时状态甚至手动暂停作业排查问题。遇到本地能过、流水线挂了这种经典事故这个终端能把排查时间从半小时压缩到五分钟。在浏览器里直接进构建环境CI 挂了的排查效率完全不同3. 团队协作看板与代码、构建状态自动联动传统看板靠人肉拖卡片OneDev 的看板支持配置规则让卡片在代码提交、测试通过、版本发布时自动流转。这意味着提交修复 → 流水线通过 → 看板卡片自动进入待发布列整条链路不用任何人手动操作。它甚至可以给每个任务挂上估算和实际耗时月底统计工时不用再翻聊天记录。看板不只是看板而是和提交、构建、发布绑在一起的自动状态机新手最常见的 3 个坑及规避方法Q1容器起来了但 SSH push 一直失败九成是防火墙或安全组没放行 6611 端口。另外注意 OneDev 的 SSH 地址要在后台配置成公网可达的地址比如gityourdomain:6611否则它会按内网地址生成 clone 命令你在外面自然连不上。规避方法初始化时就填对服务器对外地址并在防火墙放行 6610/6611。Q2重启容器后仓库全没了这是没挂数据卷的典型症状。OneDev 的数据都在/opt/onedev下不挂载的话容器重建即失忆。规避方法严格执行上面第 2 步的-v参数数据落地到宿主机目录有条件的再配合 server-product/helm/ 的 Helm Chart 上 Kubernetes用存储卷兜底。Q3配置了构建作业但任务一直 pending 不执行多半是执行器executor没配好。OneDev 的 CI 任务需要有执行环境来跑默认要么用 Docker 执行器需要容器挂载 Docker socket要么用自带的 shell 执行器。规避方法先在后台Job Executors页面确认至少有一个执行器处于启用状态再去看任务的资源限制是否匹配执行器配额。执行器管理界面本身也值得研究它支持 Docker、Shell、Kubernetes 以及远程 Agent 多种形态把执行器配好CI 任务才能有人接单文档、插件与社区资源往哪看项目自带的说明文档和开发约定在 readme.md 与 development.md想知道它怎么跑测试、怎么写服务层代码这两份能给你第一手答案。安全与权限模块的实现在 server-core/src/main/java/io/onedev/server/security/如果你对谁在什么条件下能碰什么代码有严格诉求可以直接阅读源码确认行为。生态方面server-plugin/ 下维护着认证、通知、报告等一票官方插件覆盖 LDAP、Discord、Slack、主流语言构建和各类测试报告格式大多数团队的扩展需求都能找到现成答案改起来也有源码可依。谁适合现在动手如果你符合下面任意一条我建议这周末就花半小时把它跑起来团队代码还躺在外网 SaaS 上你想把数据控制权拿回来仓库、CI、看板三套工具各管一摊流程靠人工衔接预算有限不想为 GitLab 的付费订阅买单。下一步很简单按上面第 3 步 clone 一份仓库git clone https://gitcode.com/gh_mirrors/on/onedev或者直接用 Docker 镜像起服务把第一个真实项目迁进去先跑通 push 和一条最简单的构建作业。自托管这件事最难的从来不是装起来而是迈出第一步——而 OneDev 恰恰把第一步做得足够轻。【免费下载链接】onedevThe Unified and Autonomous Development Platform项目地址: https://gitcode.com/gh_mirrors/on/onedev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考