IP地址 | 端口 | 所属服务 |
10.10.9.208 | 3000 | Gitea网页管理服务 |
10.10.9.208 | 2222 | SSH、HTTP下载代码服务 |
10.10.9.208 | 7500 | Drone-Server服务 |
10.10.9.208 | 3100 | Drone-Runner |
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证,它是从Gogs发展而来的,因为Gogs由单一管理者做决定,因此诞生了Gitea,它采用社区管理模式,增加了诸多新特性,而且由社区众多的维护者来决定它的发展方向,因此拥有更强的生命力和发展潜力。
Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。采用 Go 作为后端语言,只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了 x86,amd64,还包括 ARM 和 PowerPC.
Gitea的官方文档有中文版,其中介绍了多种安装方式,我们以docker部署为例,采用最基本的部署方式,即使用内部sqlite3为数据库,docker-compose部署配置文件如下:
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.17.2
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- SSH_PORT=2222
restart: always
networks:
- gitea
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"
其中环境变量的配置很多,我们可以在官方文档中查看,这里主要修改一下SSH_PORT
的端口,因为默认使用22端口,这会和主机的ssh服务端口冲突,因此我们修改一下端口为2222,3000端口为网页管理端口,其他的配置在第一次访问时会通过网页的方式配置。
使用命令启动镜像:
docker-compose up -d
因为比较轻量级,所以启动速度非常快,第一次访问网页端会进入初始配置页面
这里需要配置的项目有以下几个:
在可选设置中需要修改一些配置,服务器和第三方服务设置和管理员账号设置。
这里主要是启用本地模式,因为默认会使用CDN连接一些外网的资源,对于服务器不能连接外网的公司,必须要启用本地模式。一般我们都是企业内使用,因此不需要用户注册,通过管理员创建账号即可。
默认第一个注册用户会成为管理员,我们直接在这里创建好管理员信息,这里要注意的是用户名有一些保留字是不能使用的,例如admin
配置好以后点击“立即安装”就可以进入用户页面。
Gitea支持从以下代码管理仓库导入代码库
如果要支持导入,还要进行一些配置,在gitea/conf/app.ini
文件中增加如下配置
[migrations]
ALLOW_LOCALNETWORKS = true
[webhook]
ALLOWED_HOST_LIST = 10.10.9.208/16
然后重启容器
docker-compose restart
Drone 是一款基于 Docker 的 CI/CD 工具,所有编译、测试、发布的流程都在 Docker 容器中进行.
开发者只需在项目中包含 .drone.yml 文件,将代码推送到 git 仓库,Drone 就能够自动化的进行编译、测试、发布。
Drone 由两部分构成:
因此安装有两个镜像drone/drone:2.13.0
和drone/drone-runner-docker:1.8.2
,首先下载镜像
docker pull drone/drone:2.13.0
docker pull drone/drone-runner-docker:1.8.2
Drone和Jenkins这类CI工具不一样,它必须绑定指定的Git仓库,因此在启动的时候必须配置好对应的仓库信息。我们以Gitea仓库为例。
首先在Gitea里面创建好对应的验证信息
生成的令牌要记住,Drone使用OAuth2连接Gitea,这里创建好应用,重定向URI配置Drone服务的登录地址,虽然我们还没有创建好Drone服务,但是这里可以先填写好地址和端口,后面创建Drone服务的时候注意要和这里保持一致。
记录下客户端ID和客户端密钥。Drone是包含server和runner的,他们之间的通信需要进行加密,可以通过如下方式生成密钥:
openssl rand -hex 16
version: "3"
services:
drone-server:
image: drone/drone:2.13.0
container_name: drone-server
restart: always
ports:
- "7500:80"
volumes:
- ./data:/data
environment:
- DRONE_GITEA_SERVER=http://10.10.9.208:3000
- DRONE_GITEA_CLIENT_ID=9eedfa2e-b0aa-497e-aaee-c7434755fd9c
- DRONE_GITEA_CLIENT_SECRET=gto_zdessdivpj4gly2lqq2bby3qvsa6xbbrbrngj3rv24pzotsfjw4q
- DRONE_RPC_SECRET=7cc96b3ca902a735958033cb233abb6e
- DRONE_SERVER_HOST=10.10.9.208:7500
- DRONE_SERVER_PROTO=http
- DRONE_USER_CREATE=username:xingxing,admin:true
http://10.10.9.208:3000
。注意填写准确的 http(s)
协议,否则你会看到来自 Gitea 的错误报告:unsupported protocol scheme
。openssl rand -hex 16
生成的共享密钥。这个密钥用于验证 Drone Server 和 Runner 之间的 RPC 连接。因此,在 Server 和 Runner 上都必须使用相同的密钥。http://10.10.9.208:7500
。http
或 https
。 默认为 https
。配置完后启动drone-server服务
docker-compose up -d
然后访问http://10.10.9.208:7500
会自动跳到Gitea的授权页面,授权后填写邮箱、用户名、公司即可进入页面。在这里要注意一点,Drone是没有登录界面的,那么它是怎么获取到Gitea中的仓库进行构建的呢?
Drone和Gitea共用用户信息,当我们访问Drone的时候,如果在相同的浏览器内登录了Gitea,那么Drone就会使用当前Gitea登录用户的信息获取仓库数据;如果没有登录Gitea,那就会跳转到Gitea等登录页面。这个地方让我困惑了很久,一直不知道为什么有些仓库可以获取到,有些仓库又获取不到。还要注意一点,如果已经打开了Drone,我们再切换了Gitea登录的用户,那么Drone是不会自动进行切换的,这个时候需要在Drone中退出登录,再刷新页面登入即可实现切换账号。
进入后我们就看到了当前可以构建的仓库,如果在Gitea增加了参与的项目,而这里又看不到,可以点击Sync按钮进行手动同步。然后进入仓库激活它,进行一些设置。
不要接收pull和fork的WebHook消息,Trusted这里只有Drone管理员才能看到,其他用户是看不到的。
version: "3"
services:
drone-runner:
image: drone/drone-runner-docker:1.8.2
restart: always
container_name: drone-runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=10.10.9.208:7500
- DRONE_RPC_SECRET=7cc96b3ca902a735958033cb233abb6e
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=runner
http
或 https
openssl rand -hex 16
生成的共享密钥2
验证runner是否成功。
docker logs drone-runner
日志中包含以下内容则表示启动成功
starting the server
successfully pinged the remote server
Drone是采用配置文件的方式进行流水线配置的,因此我们首先要在对应的仓库根目录下创建.drone.yml
文件,内容如下:
kind: pipeline
type: docker
name: test
文件提交后就会自动触发构建
我们可以通过手动在Drone中创建一个流水线也可以通过配置触发方式来自动触发,在使用Jenkins的时候,我们需要在Git仓库中配置WebHook,并且选择WebHook的触发事件,这样才能自动触发构建,但是在安装配置Drone的时候我们并没有配置触发方式,为什么添加了.drone.yml
文件就自动触发构建了呢?原因是因为Drone是与Git仓库绑定的,当我们在创建Drone服务的时候已经配置了Gitea仓库的认证信息,那么当我们在Drone中激活一个项目的时候,Drone就会自动在Gitea中为对应的项目创建WebHook。
进入WebHook编辑页面,会看到默认帮我们选中了一些触发条件
在这里配置一下我们的触发条件,就可以自动触发构建。在这里要注意一下,Gitea在触发WebHook的时候,必须配置可以接收WebHook消息的列表,还记得我们在上面配置的webhook.ALLOWED_HOST_LIST
吗?主要就是在这里使用的,如果没有配置,那么触发以后就会报错,报错信息可以在WebHook配置页面的下方看到。
到这里我们的Gitea+Drone自动化构建系统就完成了,下面还有一个小技巧。在Drone的项目配置页面,我们会看到Badges
选项。
把里面的内容复制出来,添加到项目的README.md文件头部,这样我们就可以在Gitea项目页面中看到当前流水线的状态,就像右上角红框中显示的那样。