写在前边
这一篇文章是基于 Gitea+Drone CI+Vault 打造属于自己的CI/CD工作流系列文章第一篇,我们先来学习一下 Drone
的部署和使用,我们以 Drone
+ Github
为例来进行部署。
了解Drone
Drone是一种基于容器技术的持续交付系统。Drone使用简单的YAML配置文件(docker-compose的超集)来定义和执行Docker容器中的Pipelines。
Drone与流行的源代码管理系统无缝集成,包括GitHub,GitHub Enterprise,Bitbucket等。
Drone CI For Github
让我们一起开始实践
Drone
的部署和使用
准备工作
在这里,我为
Drone Server
使用的域名是dronetest.yiranzai.top
了解Docker-compose
Compose
项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
写了一个小Demo帮助你更快了解Docker-compose
申请一个Github OAuth Application
Github OAuth Application是为了授权
Drone Server
读取你的Github
信息。
参照我之前写的Demo 一张图搞定 Github Create an OAuth Application
记下生成的 Client ID
和 Client Secret
编写docker-compose.yml
我们需要
drone-server
(中央Drone服务器)drone-agent
(接收来自中央Drone服务器的指令以执行构建管道)mysql
(drone
默认的数据存储是sqllite3
,这里我们使用MySQL)nginx
(使用nginx
来做对外的服务代理,不要让drone-server
直接对外提供服务)参考:
1 | version: "3.7" |
运行服务
创建容器和网络
1 | $ docker-compose up -d |
编写 nginx
配置文件
1 | $ docker-compose exec nginx ash |
访问服务
先有一个OAuth验证,然后会开始同步你所有的仓库。
写到这里,Drone CI for Github
就已经搭建成功了,是不是很开心,是不是很满足?结束了吗?并没有!
我们还要测试一下 Drone Server
,测试服务的可用性。
说干就干,开搞。
验证服务
没有经过实践的项目不是可用的项目
创建空仓库,并同步到 Drone
激活
仓库怎么创建就不再赘述,在这里,我创建一个名为
dronetest
的仓库,并回到Drone
同步仓库
- 同步仓库
- 激活仓库
激活以后,检查一下GIthub仓库的Webhooks
添加
Secrets
在这里我创建了两个Secret
name: yiranzai
word: Hello World!
编写 .drone.yml
这里由于服务器配置是敏感信息,我们需要用到
Secret
来存储事先创建好登陆部署服务器所需要的
host
username
rsa
port
以及要部署的路径deploy_path
参考
1 |
|
编写 bash.sh 打印变量
1 | echo $host |
推到仓库,查看效果
push to repo
1
2
3
4git init
git add .;git commit -m 'init test'
git remote add origin git@github.com:yiranzai/dronetest.git
git push -u origin master查看
Drone
的ACTIVITY FEED
如果成功就会如下图所示
如果失败,会有错误信息
这里是由于我用的
node
镜像是node:alpine
,没有bash
去服务器检查一下
看到
bash.sh
和.drone.yml
都被上传到这里(只是测试,不是真的让你这么干)
1 | $ pwd |
总结
Drone CI for Github的部署到此就真的结束了,一路走来,踩了不少坑,Drone的文档你慢慢看了以后就会发现有多烂,烂到心累想哭,许多在Demo中出现的变量在参考手册中找不到,完全不知道什么含义,只能靠瞎猜和摸索。
总结犯过的错误和坑
yaml
格式的文件后缀是yml
(我智障)drone-server
一定要设置一个管理员drone-server
中的变量DRONE_SERVER_PROTO
和DRONE_SERVER_HOST
决定了你仓库中webhook
的地址,如果你的域名做了http to https
,而且你的DRONE_SERVER_PROTO
是http
,将会产生301重定向,method
从post
转成get
,会发生error 405
drone
是用GO语言开发的,drone
使用的http
包,不支持没写协议的url
,例如dronetest.yiranzai.top
不能被识别,要写成http(s)://dronetest.yiranzai.top
- 建议测试阶段打开debug,方便部署和调试
系列文章
- 基于 Gitea+Drone CI+Vault 打造属于自己的CI/CD工作流
- (一) Drone CI For Github —— 打造自己的CI/CD工作流
- (二) Drone CI使用Vault作为凭据存储 —— 打造自己的CI/CD工作流
- (三) 轻量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流
- 番外:基于Gitea打造一个属于你自己的代码托管平台
END
不说了,我去调整心态了并生产BUG了。