最近想实践一下 DevOps,所以准备搭建一套代码托管和CI/CD 系统。
技术选型
代码托管
代码托管系统的选择其实并不多:
- Gitea
- Gogs
- GitLab
由于 Gitlab
资源占用过大,所以可以直接去除(毕竟这个系统只有我一个人在用,而且只有一台1核2G的服务器)。
Gitea
是脱胎于Gogs
的,在Gogs
上做了较多的扩展,而且迭代的也毕竟快。Gitea
对现有的代码托管做了横向对比,
我们可以看出来Gitea
几乎是最优选择。
Gitea
有一个比较显著的缺点,它没有像Gitlab
一样内置了CI/CD
,所以我们必须搭另外一套CI/CD
系统。
CI/CD
对现有的 CI/CD 进行了一下调研:
- Jenkins
- 优点:最为流行,出现坑的容易找到解决方案
- 缺点:用 Java 编写,过于笨重
- GitLab CI
- 优点:据说很好用
- 缺点:笨重
- Drone
- 优点:轻量级,支持
Gitea
- 缺点:生态不够丰富,文档差
- 优点:轻量级,支持
在这里我们选择Drone
作为CI/CD
,主要原因当然是因为只有它轻量级啊。
Gitea
在安装Gitea
和Drone
时,我们都选择使用docker-compose
来管理,因此需要先安装docker
和docker-compose
。
创建一个gitea
文件夹,并在该文件夹下创建docker-compose.yml
文件:
这里面需要注意的是,设置SSH_PORT
和SSH_DOMAIN
,这样 gitea 生成的 repo SSH 链接才是能直接使用的形式。
填写完后,直接docker-compose up -d
开启服务即可,第一次登陆时,会跳出一个安装页面,可以设置所使用的数据库和管理员账号,同时要记得检查一下 SSH 端口和域名是否正确。
Drone
Drone
的安装比Gitea
复杂的多,同时需要先在Gitea
中创建OAuth2
应用程序:
打开Gitea
的页面 -> 个人信息 -> 应用 -> 管理 OAuth2 应用程序
应用名称填什么都无所谓,但是重定向 URL 比较重要,要填 Drone
服务的地址(虽然现在还没启动),比如说,你的 Drone 的 ip
地址为1.2.3.4
,Drone
端口的为8000
,
那么就可以填http://1.2.3.4:8000
。
创建后会得到一个客户端ID和客户端密钥。这时,Gitea
的设置就已经完成了。
为了让Drone Server
和Drone Runer
能够通过RPC
连接,我们需要生成RPC
密钥,可以在 shell 中使用该命令来生成随机数,用该随机数作为 RPC 的密钥
上面的操作中可以得到:
- 客户端 ID
- 客户端密钥
- RPC 密钥
创建一个drone
文件夹并在其中创建一个docker-compose.yml
文件:
和Gitea
同理,我们只需要在docker-compose up -d
即可。
第一次打开 Drone 会先跳到 Gitea 进行验证。由于打开 Drone 会验证 Gitea 是否登陆,所以不用担心 Drone 的页面直接暴露到公网。
测试 Drone 和 Gitea
- 在 Gitea 中创建一个 repo
- 在 Drone 激活该 repo
- 创建公钥并加入到 gitea 中(这一步和 Github 类似)
- 将 repo clone 到本地
- 创建一个
.drone.yml
文件: - git commit and push
.drone.yml
的样例如下:
关于.drone.yml
的信息可以查看官方文档。
之后估计也会写一篇 blog 对 Drone 的使用进行下总结。