Git服务
Git是一种功能强大、灵活高效的分布式版本控制系统。它具有版本控制、分支管理、协作功能等一系列强大的功能,可以帮助开发者更好地组织和管理代码。Git还具有高度可靠性和安全性,保证代码的完整性和安全性。通过引入一些奇特的概念和术语,Git让代码管理变得更加有趣和简单。无论是个人开发者还是大型团队,Git都是不可或缺的工具,它的功能和特点将为软件开发带来巨大的便利和效益。
引自百科
服务器
自己使用开源git服务器搭建
- gitlab-ce: 内存至少4G,否则特别卡顿, CI/CD使用gitlab-runner
- gogs: Gogs 是一款极易搭建的自助 Git 服务,其目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台
- gitea: Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务,该服务采用golang编写,适合在树莓派等低内存设备上运行,支持跨平台例如:x86,arm,arm64v8等多个平台,CI/CD使用act runner。查看帮助文档: https://docs.gitea.com/ (推荐使用,目前笔者树莓派4B 8G版正在运行该软件) 其他: Gitosis, Gitolite,Gidder这些笔者没测试过,生产环境也没用过,暂时不做介绍
公共代码托管服务器
- github.com: 全球知名代码托管平台,国内dns不稳定,需要科学上网
- bitbucket: 以前公司使用的是这家,外企使用的比较多
- gitee.com: 开源中国代码托管,目前用于github.com仓库镜像使用
CI/CD:
- jenkins: 企业级推荐,支持多种插件,实现自动化构建、测试与部署,功能完善、如果遇到问题百度、谷歌搜索基本可以解决,同时也吃内存,毕竟是用java写的, 目前笔者在树莓派4B上正在运行
- gitlab-runner: gitlab推荐的, 笔者很久以前的一个公司一直在使用
- github actions: github.com自带的action,需要了解使用语法
- CircleCI:它主要以容器化技术为基础,提供快捷且高效的构建环境。CircleCI的特点是很容易与GitHub、Bitbucket等代码托管平台集成, 并且提供灵活的配置选项以适应各种工作流
- Travis CI: (笔者没用过) 是一个广为人知的CI服务,特别是对于开源项目。它能够与GitHub紧密集成,当代码推送到GitHub后,Travis CI会自动运行预设的构建和测试任务
- 其他:Bamboo(Atlassian 出品的CI/CD工具),TeamCity(由 JetBrAIns 开发)
环境搭建
介绍一下笔者树莓派上运行的服务
- gitea:代码仓库托管
- jenkins:自动化编译与部署
- docker-compose: docker编排工具
- docker-compose-restful: 用于接受jenkins编译后的触发项目部署,在树莓派上运行的一个服务(内部主要是对docker-compose功能的cmd封装),这样可以在切换不同的CI/CD后,减少各个平台对后置事件的学习和测试
docker运行gitea
1.创建网络
1docker network create traefik
2docker network create spider-cluster
2.docker-compose.yaml, 注意端口22容易被占用, 在终端启动 docker-compose up -d
1version: '3.9'
2
3services:
4 gitea:
5 image: gitea/gitea:1.22.1
6 container_name: gitea
7 restart: always
8 volumes:
9 - ./data:/data
10 - /etc/localtime:/etc/localtime
11 ports:
12 - "3000:3000"
13 - "322:22"
14 labels:
15 # https://soulteary.com/2020/02/04/gitea-git-server-with-docker-and-traefik-v2.html
16 - "traefik.enable=true"
17 - "traefik.http.routers.giteaweb.middlewares=https-redirect@file"
18 - "traefik.http.routers.giteaweb.entrypoints=http"
19 - "traefik.http.routers.giteaweb.rule=Host(`git.linuxcrypt.cn`)"
20
21 - "traefik.http.routers.giteassl.middlewares=content-compress@file"
22 - "traefik.http.routers.giteassl.entrypoints=https"
23 - "traefik.http.routers.giteassl.tls=true"
24 - "traefik.http.routers.giteassl.rule=Host(`git.linuxcrypt.cn`)"
25
26 - "traefik.http.services.giteabackend.loadbalancer.server.scheme=http"
27 - "traefik.http.services.giteabackend.loadbalancer.server.port=3000"
28
29 - "traefik.tcp.routers.giteassh.rule=HostSNI(`*`)"
30 - "traefik.tcp.routers.giteassh.tls=true"
31 - "traefik.tcp.routers.giteassh.entrypoints=git"
32 - "traefik.tcp.routers.giteassh.service=gitea"
33 networks:
34 - traefik
35 - spider-cluster
36
37networks:
38 traefik:
39 external: true
40 spider-cluster:
41 external: true
3.启动容器后,在项目根目录下查看目录结构如下
1tree .
1.
2├── data
3│ ├── git 仓库目录
4│ ├── gitea
5│ │ ├── conf
6│ │ │ └── app.ini 核心配置文件,可以配置邮箱、数据库配置,主机域名、白名单等等配置。
7│ │ └── log
8│ └── ssh ssh相关配置
9│ ├── ssh_host_ecdsa_key
10│ ├── ssh_host_ecdsa_key.pub
11│ ├── ssh_host_ed25519_key
12│ ├── ssh_host_ed25519_key.pub
13│ ├── ssh_host_rsa_key
14│ └── ssh_host_rsa_key.pub
15└── docker-compose.yml docker编排文件
注意以上docker-compose.yaml文件中的labels标签,主要用于内网直接连接gitea服务, 不会再外网绕一圈,减少vps服务的流量(因为笔者的树莓派4B通过frp与vps打通的)
4.打开http://localhost:3000进行安装和配置
a.选择数据库, 根据自己的环境选择使用,笔者使用过MySQL、SQLite3
b.基础配置,注意挂载的目录/data,以及基础URL用于克隆
c.配置邮箱,通过第三方开启配置,增加管理员
5.登陆
a.登陆
6.个人中心
a. 用户中心,个人信息
b.个人中心,菜单
c.个人中心,应用,后期对接jenkins需要启用token
7.管理后台
admin后台管理界面
8.上传代码
demo项目
9.上传后gitea服务端的文件树结构
1.
2├── data
3│ ├── git
4│ │ ├── lfs
5│ │ └── repositories
6│ │ └── clibing
7│ │ └── demo.git
8│ │ ├── HEAD
9│ │ ├── branches
10│ │ ├── config
11│ │ ├── description
12│ │ ├── git-daemon-export-ok
13│ │ ├── hooks
14│ │ │ ├── applypatch-msg.sample
15│ │ │ ├── commit-msg.sample
16│ │ │ ├── post-receive
17│ │ │ ├── post-receive.d
18│ │ │ │ └── gitea
19│ │ │ ├── post-update.sample
20│ │ │ ├── pre-applypatch.sample
21│ │ │ ├── pre-commit.sample
22│ │ │ ├── pre-merge-commit.sample
23│ │ │ ├── pre-push.sample
24│ │ │ ├── pre-rebase.sample
25│ │ │ ├── pre-receive
26│ │ │ ├── pre-receive.d
27│ │ │ │ └── gitea
28│ │ │ ├── pre-receive.sample
29│ │ │ ├── prepare-commit-msg.sample
30│ │ │ ├── proc-receive
31│ │ │ ├── proc-receive.d
32│ │ │ │ └── gitea
33│ │ │ ├── push-to-checkout.sample
34│ │ │ ├── sendemail-validate.sample
35│ │ │ ├── update
36│ │ │ ├── update.d
37│ │ │ │ └── gitea
38│ │ │ └── update.sample
39│ │ ├── info
40│ │ │ ├── exclude
41│ │ │ └── refs
42│ │ ├── logs
43│ │ │ ├── HEAD
44│ │ │ └── refs
45│ │ │ └── heads
46│ │ │ └── main
47│ │ ├── objects
48│ │ │ ├── 8e
49│ │ │ │ └── 2372258763bcef1dddd67d4ba4aa129d9dfb06
50│ │ │ ├── e6
51│ │ │ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
52│ │ │ ├── f9
53│ │ │ │ └── 3e3a1a1525fb5b91020da86e44810c87a2d7bc
54│ │ │ ├── info
55│ │ │ │ └── packs
56│ │ │ └── pack
57│ │ └── refs
58│ │ ├── heads
59│ │ │ └── main
60│ │ └── tags
61│ ├── gitea
62│ │ ├── actions_artifacts
63│ │ ├── actions_log
64│ │ ├── attachments
65│ │ ├── avatars
66│ │ │ ├── d4fcdeb1937686868f5633d23fc4caad
67│ │ │ └── tmp
68│ │ ├── conf
69│ │ │ └── app.ini
70│ │ ├── gitea.db
71│ │ ├── home
72│ │ ├── indexers
73│ │ │ └── issues.bleve
74│ │ │ ├── index_meta.json
75│ │ │ ├── rupture_meta.json
76│ │ │ └── store
77│ │ │ └── root.bolt
78│ │ ├── jwt
79│ │ │ └── private.pem
80│ │ ├── log
81│ │ ├── packages
82│ │ ├── queues
83│ │ │ └── common
84│ │ │ ├── 000001.log
85│ │ │ ├── CURRENT
86│ │ │ ├── LOCK
87│ │ │ ├── LOG
88│ │ │ └── MANIFEST-000000
89│ │ ├── repo-archive
90│ │ ├── repo-avatars
91│ │ ├── sessions
92│ │ │ ├── 0
93│ │ │ │ └── 4
94│ │ │ ├── 8
95│ │ │ │ └── 9
96│ │ │ │ └── 89ee589f8c7985d9
97│ │ │ ├── b
98│ │ │ │ └── 2
99│ │ │ │ └── b20631975fa94021
100│ │ │ └── f
101│ │ │ └── 0
102│ │ └── tmp
103│ │ └── package-upload
104│ └── ssh
105│ ├── ssh_host_ecdsa_key
106│ ├── ssh_host_ecdsa_key.pub
107│ ├── ssh_host_ed25519_key
108│ ├── ssh_host_ed25519_key.pub
109│ ├── ssh_host_rsa_key
110│ └── ssh_host_rsa_key.pub
111└── docker-compose.yml
评论