Git仓库
2019 12 29, Sun
作为一个开发我怎么可能不自己搭一个git仓库放私有代码呢?
几个常用的自己托管的Git仓库
- 收费
- Bitbucket:https://bitbucket.org/product/download bitbucket除了公有云以外也支持私有化部署。支持lfs等功能,可以和jira等其他组建结合来管理代码以及开发中的各种问题。计费模式主要是按人头付费。
- Gitlab:https://about.gitlab.com/install/ Gitlab可能是Github之外最出名的Git托管网站之一了。Gitlab也提供自己托管服务的选项,可选付费。
- 纯免费
- Gogs:https://gogs.io/
基于Go的git仓库。不过最近虽然有维护,但是更新不是很频繁来着,很多新功能的请求都没有加入也没有被合并。似乎是因为Gogs的作者并不愿意和其他人合作开发一个项目,所以有了Gitea这个fork:
- Gitea:https://gitea.io/en-us/ Gitea是Gogs的一个fork。主要是加快了非常多的功能开发。加入了非常多的非常实用的功能,比如说release。从gogs继承而来的功能也包括一个简单的issue tracker,对个人来说也够用了。
- Bonobo Git Server:https://bonobogitserver.com/ 2017年给EasyX的作者杨伟打了几个月工,这边主要都是Windows+C#栈,所以也选择了同样是C#为基础的Bonobo作为git仓库。基本上就是一个很简单的Git仓库。
- Gerrit:https://www.gerritcodereview.com/ 一开始看到这个服务,是很久以前折腾AOSP的时候看到的issue tracker,主要是管理仓库和问题。 比较有意思的是,Gerrit 是 Rietveld 的一个分支,而Gerrit Reitveld是一位设计师的名字。
- GitWeb:https://git-scm.com/book/en/v2/Git-on-the-Server-GitWeb 如果你是用ssh直接把仓库放在服务器上,然后只是想可视化一下,那么git带一个cgi脚本,可以非常简单的可视化你的仓库
- Gogs:https://gogs.io/
基于Go的git仓库。不过最近虽然有维护,但是更新不是很频繁来着,很多新功能的请求都没有加入也没有被合并。似乎是因为Gogs的作者并不愿意和其他人合作开发一个项目,所以有了Gitea这个fork:
因为我今年开始写Go的缘故,我选择了Go构成的Gitea作为自己的git仓库。
Gitea
如上所说,Gitea是一个非常简单好用的gogs分支,功能比gogs也多很多,稳定性也不错。
同时也可以非常简单地利用drone做一些自动化测试和部署
Drone
drone一开始是一个主要集成在gogs上的CI,主要是依靠几种runner来在本地、通过ssh或者通过docker执行构建和测试的任务,可以非常简单的制定构建的条件、步骤等等。
简化过的docker部署
[guochao@nas ~]$ cat /data/.docker-compose/git/docker-compose.yml
version: '2'
services:
web:
image: gitea/gitea:latest
volumes:
- "${PWD}/gitea:/data"
depends_on:
- db
restart: always
networks:
gitea:
db:
image: mariadb:10.4.11
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=gitea
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- "${PWD}/db:/var/lib/mysql"
networks:
gitea:
drone:
image: drone/drone:1.6.3
restart: always
environment:
- "DRONE_GIT_ALWAYS_AUTH=true"
- "DRONE_GITEA_SERVER=${DRONE_GITEA_SERVER}"
- "DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID}"
- "DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET}"
- "DRONE_RUNNER_CAPACITY=1"
- "DRONE_RPC_SECRET=${DRONE_RPC_SECRET}"
- "DRONE_SERVER_HOST=${DRONE_SERVER_HOST}"
- "DRONE_SERVER_PROTO=https"
- "DRONE_TLS_AUTOCERT=false"
- "DRONE_LOGS_DEBUG=true"
- "DRONE_USER_CREATE=username:guochao,machine:false,admin:true,token:${DRONE_PASSWORD}"
networks:
gitea:
volumes:
- "drone-data:/data"
- "/var/run/docker.sock:/var/run/docker.sock"
runner:
image: drone/drone-runner-docker:1.1.0
restart: always
environment:
- "DRONE_RPC_PROTO=http"
- "DRONE_RPC_HOST=drone"
- "DRONE_RPC_SECRET=${DRONE_RPC_SECRET}"
- "DRONE_RUNNER_CAPACITY=2"
- "DRONE_RUNNER_NAME=${HOSTNAME}"
networks:
gitea:
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
gitea: