美文网首页金融基础技术与业务
一款用Go编写的,由开源社区驱动的代码托管平台Gitea

一款用Go编写的,由开源社区驱动的代码托管平台Gitea

作者: DevOps亮哥 | 来源:发表于2019-11-23 19:36 被阅读0次

    一、介绍

    Gitea是一个由开源社区驱动的轻量级的代码托管解决方案,后端采用Go语言编写,采用MIT许可证协议。使用Gitea可以搭建一个自己托管的Git服务程序,与Github、Bitbucket和Gitlab比较类似,但更加轻量。Gitea是2016年11月从Gogs发展出来,并且做了很多改进,目标就是创建一个极易安装、运行快速、体验良好的自建Git服务。目前在Github上有16.9k个Star、1.9k个fork,657个贡献者,社区活力非常强劲,并且云原生下的Jenkins X也在支持Gitea,相信在不远的未来,一定能成为一款成熟的云原生下的Git服务平台。

    二、特性

    Gitea目前的功能特性也很强大,能够满足内部Git服务的基本要求,支持如下特性:

    支持活动时间线

    支持 SSH 以及 HTTP/HTTPS 协议

    支持 SMTP、LDAP 和反向代理的用户认证

    支持反向代理子路径

    支持用户、组织和仓库管理系统

    支持添加和删除仓库协作者

    支持仓库和组织级别 Web 钩子(包括 Slack 集成)

    支持仓库 Git 钩子和部署密钥

    支持仓库工单(Issue)、合并请求(Pull Request)以及 Wiki

    支持迁移和镜像仓库以及它的 Wiki

    支持在线编辑仓库文件和 Wiki

    支持自定义源的 Gravatar 和 Federated Avatar

    支持邮件服务

    支持后台管理面板

    支持 MySQL、PostgreSQL、SQLite3, MSSQL 和 TiDB(实验性支持) 数据库

    支持多语言本地化(21 种语言)

    与其他Git托管工具的横向比较

    以Gitea官网为主,由于并未定时检查,有些特性可能并不是最新的。

    1、主要特性

    2、代码管理

    3、Issue 管理

    4、Pull/Merge requests

    5、第三方集成

    三、安装

    Gitea提供了多个平台、多种安装方式,不管是独立安装、容器部署还是基于源码安装都支持。

    1、从Docker安装

    在Docker Hub里有Gitea最新的Docker镜像,并且会保持持续更新,可以使用docker pull命令来拉取Gitea的镜像。

    dockerpull gitea/gitea:latest

    使用docker安装需要注意一点:容器每次启动都会基于镜像原始状态,因此每次重启时,容器内部所做的更改都会丢失。特别是对于需要持久化的代码仓库数据,一定要将目录挂载出来,防止容器重启丢失。假如,在外部磁盘有一个/var/lib/gitea的目录,我们可以这样启动docker容器:

    docker run -d --name=gitea -p10022:22-p10080:3000-v /var/lib/gitea:/data gitea/gitea:latest

    当容器成功启动后,就可以在浏览器中输入http://localhost:10080进行访问,可以尝试在上面创建项目,使用git clone ssh://git@hostname:10022/username/repo.git进行clone操作。

    2、Linux安装

    在Gitea的Github页面的Release里可以下载官方发布的任意版本的安装程序,在安装程序里默认集成了SQLite,同时也支持MySQL和PostgreSQL,以及所有需要的资源都已经嵌入到安装程序里。

    以systemd方式运行

    在命令行里执行如下命令,拷贝gitea.service里的内容,并取消和修改里面的初始化参数,如:user的home目录、自定义的端口等。

    sudovim /etc/systemd/system/gitea.service

    修改完后,激活gitea并将其作为系统自启动服务:

    sudosystemctl enable giteasudosystemctl start gitea

    3、Window安装

    Window的安装程序也可以在Gitea的Github页面的Release里可以下载官方发布的任意版本,一个独立的安装包就可以启动运行。

    要注册为Window的服务,首先要以Administrator身份运行 cmd,然后执行以下命令,其中C:\gitea为你安装Gitea的目录:

    sccreategiteastart=autobinPath=""C:\gitea\gitea.exe" web --config "C:\gitea\custom\conf\app.ini""

    之后在控制面板打开 “Windows Services”,搜索 “gitea”,右键选择 “Run”。在浏览器打开 http://localhost:3000 就可以访问了。(如果你修改了端口,请访问对应的端口,3000是默认端口)。

    4、源码安装

    因为Gitea是用Go语言编写,首先需要安装GoLang,并且已经安装了Git版本控制工具。

    下载源码

    首先需要从github上获取Gitea的源码,使用如下命令clone源码:

    gitclonehttps://github.com/go-gitea/gitea.gitcd./gitea

    编译源码

    这里默认下载master分支,如果使用其他分支,可以checkout到目标分支。下面使用go build进行编译。

    go build

    测试程序

    在执行了以上步骤之后,你将会获得 gitea 的二进制文件,在命令行执行./gitea web启动程序,也能打开上面的界面。

    四、使用

    组织结构

    代码托管平台虽然是用来托管代码的,但代码库以及用户本身都会有组织的属性。代码库要属于系统、应用、项目或产品,而这些又属于某个团队、某个部门,同样,开发人员也有自己的团队、和部门。这些都在统计代码提交数据时都是非常重要的维度。在Gitea里,可以通过创建组织以及下一级的团队来实现组织结构,但不能创建多级组织。如下图所示:EE是一级组织(只支持字母和数字),在EE组织下面,可以创建多个团队,目前创建了DevOps这个团队。还可以看到整个组织以及团队的成员和代码库。

    创建代码库

    组织结构创建好了,就可以创建代码库了,在创建代码库的时候,可以选择这个代码库归属于哪个组织,以及代码库名称、描述和其他代码库相关的信息。

    代码库页面

    创建好的代码库如下所示,这个界面相信大家都非常熟悉了,和Github和Gitlab非常相似。

    代码下载和提交

    使用http或ssh协议将源码下载,然后修改README.md文件,增加“这是一个不错的git server”。然后,git add ,git commit,git push将变更提交到远程服务器上。

    刷新代码库页面,可以发现README.md文件已经变了,同时提交数为2个。

    查看变更

    点开“2次提交”可以显示提交历史,当前有2次提交,第二次就是刚才的提交信息,包括提交者、commitID,备注,提交时间等信息。

    点击CommitID就会打开本次提交的Diff视图,能够清晰的看到本次变更的内容。

    Fork代码

    如何要开发一个新需求,可以fork新建一个自己的代码仓库。

    在fork后的代码库上提交变更。修改内容为README.md文件,增加“我觉得也是”。

    合并请求

    假如此时变更开发完成,需要合并到主干,可以创建合并请求。

    合并请求创建完成后,可以在源代码库的合并请求标签页中显示请求信息,也包含讨论动态、代码提交和文件变动等信息。

    经过检查,代码可以合入到主干后,可以点击“合并请求”按钮,将提交的请求进行合并。合并之前,该合并请求的状态就变成“已合并”。

    同时,从提交图中也可以看出合并的操作。

    除此之外,gitea还可以创建工单、版本发布、百科和动态的功能,大家可以去尝试,这里就不一一罗列了。

    五、总结

    如今,版本控制系统经过集中式的控制时代,进入了分布式版本控制时代,而分布式版本控制,用的非常多的工具就是Git,Git可以不仅可以实现代码的版本控制,还可以实现文档等二进制文件的版本控制,在基础设施及代码最佳实践中,所有基础设施的构建已经版本控制都会采用Git进行管理。

    Gitea作为一个用Go语言编写的轻量级的Git Server,能够满足DevOps几乎全部的版本控制场景。Gitea的社区非常活跃,功能仍旧在不断完善中。另外,Jenkins X 云原生时代的CICD框架也开始支持Gitea,虽然目前还有问题。云原生时代的CICD与Git的结合,能够大大提高代码构建、环境准备、环境部署的效率。

    DevOps提高的是效率和质量,选择一款合适的Git Server也是其中重要的一环,期待Gitea越来越好,成为云原生时代的爆款。

    相关文章

      网友评论

        本文标题:一款用Go编写的,由开源社区驱动的代码托管平台Gitea

        本文链接:https://www.haomeiwen.com/subject/oyzhwctx.html