轻量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流(三)
这一篇文章是基于 Gitea+Drone CI+Vault 打造属于自己的 CI/CD 工作流 系列文章第三篇,让我们一起来完成 drone 与 gitea 的搭配使用,这篇内容比较简单和容易,也是最终篇。
在第一篇文章中(一) Drone CI For Github —— 打造自己的 CI/CD 工作流,我们一起了解了Drone For Github
的部署和使用,一起感受了 Drone
的简单强大的功能带来的方便和快捷。
在第二篇文章中(二) Drone CI 使用 Vault 作为凭据存储 —— 打造自己的 CI/CD 工作流,我们一起了解了Vault
的部署和使用,并了解和学习了怎么为 Drone
指定 Secret
的存储为 Vault
,解决了在实际的应用中,不同项目的敏感数据重复使用以及权限控制问题。
在更早的一篇文章中基于 Gitea 打造一个属于你自己的代码托管平台,我们一起了解了 Gitea
的部署和使用,感受 Gitea
作为一个轻量化的代码托管平台,依然拥有丰富的功能和美观的界面。
我们分别了解了 Drone
、Vault
和 Gitea
的部署和使用,那么我们为什么不把它们结合起来,打造一个专属于自己的 CI/CD 工作流呢?
废话少说,说干就干,开始搞事。
组合Drone
、Vault
和 Gitea
接来下,我们开始将Drone
、Vault
和 Gitea
组合到一起,构建一个专属于自己的 CI/CD 工作流
如果你对它们还不了解,请参考我之前的文章。
- Drone CI For Github —— 打造自己的 CI/CD 工作流(一)
- Drone CI 使用 Vault 作为凭据存储 —— 打造自己的 CI/CD 工作流(二)
- 基于 Gitea 打造一个属于你自己的代码托管平台
编写
docker-compose.yml
这里我们结合之前三篇文章的 docker-compose.yml
加入
gitea
之后,只需要修改drone-server
的environment
删除
DRONE_GITHUB_SERVER
DRONE_GITHUB_CLIENT_ID
DRONE_GITHUB_CLIENT_SECRET
加入
DRONE_GITEA_SKIP_VERIFY
DRONE_GITEA_SERVER
version: "3.7"
services:
nginx:
image: nginx:alpine
container_name: drone_nginx
ports:
- "80:80"
restart: always
networks:
- dronenet
mysql:
image: mysql:5.7
restart: always
container_name: drone_mysql
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=drone
- MYSQL_USER=drone
- MYSQL_PASSWORD=drone_password
networks:
- dronenet
volumes:
- /path/to/conf/my.cnf:/etc/mysql/my.cnf:rw
- /path/to/data:/var/lib/mysql/:rw
- /path/to/logs:/var/log/mysql/:rw
vault:
image: vault:latest
container_name: vault
restart: always
networks:
- dronenet
volumes:
- ./vault/file:/vault/file
- ./vault/config:/vault/config
- ./vault/logs:/vault/logs
cap_add:
- IPC_LOCK
environment:
- VAULT_ADDR=http://127.0.0.1:8200
command: vault server -config=/vault/config/local.json #这句非常重要,一定要替换原有的Dockerfile中的CMD,不然会自动初始化,生成的数据都在docker logs中,不说你肯定找不到。dog.jpg,所以我选择手动初始化
memcache:
image: memcached:alpine
container_name: test_memcache
restart: always
networks:
- dronenet
gitea:
image: gitea/gitea:latest
restart: always
container_name: test_gitea
networks:
- dronenet
ports:
- "22:22" #git服务对外使用22端口会更加方便
volumes:
- /var/lib/gitea:/data:rw #gitea的data数据应该做持久化,映射到宿主机磁盘上
drone-server:
image: drone/drone:1.0.0-rc.5 #不要用latest,latest并非稳定版本
container_name: drone_server
networks:
- dronenet
volumes:
- ${DRONE_DATA}:/var/lib/drone/:rw
- /var/run/docker.sock:/var/run/docker.sock:rw
restart: always
environment:
- DRONE_DEBUG=true
- DRONE_DATABASE_DATASOURCE=drone:drone_password@tcp(drone_mysql:3306)/drone?parseTime=true #mysql配置,要与上边mysql容器中的配置一致
- DRONE_DATABASE_DRIVER=mysql
- DRONE_GITEA_SKIP_VERIFY=false
- DRONE_GITEA_SERVER=http://test_gitea:3000
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_RUNNER_CAPACITY=2
- DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw #RPC秘钥
- DRONE_SERVER_PROTO=http #这个配置决定了你激活时仓库中的webhook地址的proto
- DRONE_SERVER_HOST=drone.5io.cc
- DRONE_USER_CREATE=username:5io,admin:true #管理员账号,是你想要作为管理员的Gitea用户名
drone-vault:
image: drone/vault
container_name: drone_vault
restart: always
networks:
- dronenet
environment:
- SECRET_KEY=7890bcce69bb685a9a424767fe9d1be1 #和drone-agent通信的加密
- DEBUG=true
- VAULT_ADDR=http://vault:8200
- VAULT_TOKEN_RENEWAL=84h
- VAULT_TOKEN_TTL=168h
- VAULT_TOKEN=s.mx4KQycrFAfiaHIuPnNLhFCy #这里不要用root token,用上边生成的只读token
drone-agent:
image: drone/agent:1.0.0-rc.5
container_name: drone_agent
restart: always
networks:
- dronenet
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_SECRET_SECRET=7890bcce69bb685a9a424767fe9d1be1
- DRONE_SECRET_ENDPOINT=http://drone_vault:3000
- DRONE_RPC_SERVER=http://drone_server
- DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw
- DRONE_DEBUG=true
- DRONE_LOGS_DEBUG=true
- DRONE_LOGS_PRETTY=true
- DRONE_LOGS_NOCOLOR=false
networks:
dronenet:
结束了?
是的结束了,如果你仔细看了前两篇文章的话,会明白,这一点都不奇怪,从
github
切换到gitea
只需要简单改动配置即可。本系列前两篇文章是重中之重,请着重阅读。
总结
本篇文章简单归简单,但是整体的配合还是有一些需要注意的点需要说明一下
gitea
的账号就是用来登陆drone
的账号,在drone-server
中的environment
:DRONE_USER_CREATE
指明管理员的用户名- 所有的 url 都要写上协议
Vault
初始化生成的五个unseal key
和root token
一定要记住并且不能泄露drone-agent
可以有多个,做分布式。vault
也是可以分布式的
系列文章
- 基于 Gitea+Drone CI+Vault 打造属于自己的 CI/CD 工作流
- Drone CI For Github —— 打造自己的 CI/CD 工作流(一)
- Drone CI 使用 Vault 作为凭据存储 —— 打造自己的 CI/CD 工作流(二)
- 轻量化自建 Drone CI For Gitea —— 打造自己的 CI/CD 工作流(三)
- 番外:基于 Gitea 打造一个属于你自己的代码托管平台
有什么问题,欢迎评论或邮件。
好了,继续划水去了。
本作品采用《CC 协议》,转载必须注明作者和本文链接