前面我们基于Docker搭建了Gitea,今天我们继续来学习自动发布,说到代码发布,开源的产品非常之多,目前主流的要数jenkins了,但是这货对于我来说,太重了、太臃肿了,最终我选择了Drone。
安装Drone分Server端和Runner端两部分,这里的Runner我安装的是Exec Runner.

安装Drone Server
配置Gitea OAuth
个人->设置->应用
创建成功后,便会生成客户端ID和客户端密钥,这需要配置在Drone中
Docker启动Drone
1
2
3
4
5
6
7
8
9
10
11
12
| docker run \
--volume=/root/drone:/data \
--env=DRONE_GITEA_SERVER=http://101.34.179.216:3000/ \
--env=DRONE_GITEA_CLIENT_ID=2093500c-70c8-49ed-97cc-b68de7d40dbc \
--env=DRONE_GITEA_CLIENT_SECRET=AHqbnELyo8gud4cTs2206Ysf973k7YPdDOxCuvsBRo7Y \
--env=DRONE_RPC_SECRET=super-duper-secret \
--env=DRONE_SERVER_HOST=101.34.179.216:8088 \
--publish=8088:80 \
--restart=always \
--detach=true \
--name=drone \
drone/drone
|
安装Exec Runner
下载Exec Runner
官方有不同架构的版本,这里我准备下载amd64
1
2
| curl -L https://github.com/drone-runners/drone-runner-exec/releases/latest/download/drone_runner_exec_linux_amd64.tar.gz | tar zx
install -t /usr/local/bin drone-runner-exec
|
配置Exec Runner
先去etc新建drone-runner-exec目录,然后vim config加入如下配置
1
2
3
4
5
| DRONE_RPC_PROTO=http
DRONE_RPC_HOST=101.34.179.216:8088 #Drone Server
DRONE_RPC_SECRET=super-duper-secret
DRONE_LOG_FILE=/root/execrunner/log.txt
|
安装Exec Runner
1
| drone-runner-exec service install
|
会提示正在安装
1
2
3
| read configuration /etc/drone-runner-exec/config
installing service drone-runner-exec
|
然后启动服务drone-runner-exec service start
在日志文件中可以看到成功启动的日志
1
2
3
4
| time="2021-12-31T10:43:12+08:00" level=info msg="starting the server" addr=":3000"
time="2021-12-31T10:43:12+08:00" level=info msg="successfully pinged the remote server"
time="2021-12-31T10:43:12+08:00" level=info msg="polling the remote server" capacity=2 endpoint="http://101.34.179.216:8088" kind=pipeline type=exec
|
完成这几步操作后,Drone便安装成功了
配置Drone进行发布
我们点击仓库名进入到设置界面,首先便是激活仓库,然后做一些设置
我们在项目目录下新增一个.drone.yml的配置文件,配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
| kind: pipeline
type: exec
name: default
steps:
- name: build
commands:
- docker build -t docker-web .
- name: publish
commands:
- docker run -d --name docker-web -p 8880:80 docker-web
|
然后提交到gitea中,这是,会触发Drone的构建事件,因为我安装的是 Exec Runner所以必须在宿主机上安装Git,否则会拉取代码失败,我第二次构建,可以看到,在publish阶段失败了,
那是因为我之前已经有该容器在运行了,我们来把脚本调整一下,先停止老容器,然后删除掉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| kind: pipeline
type: exec
name: default
steps:
- name: build
commands:
- docker build -t docker-web .
- name: publish
commands:
- docker stop docker-web
- docker rm docker-web
- docker run -d --name docker-web -p 8880:80 docker-web
|
修改好了,我们再次提交一下,Drone会自动构建
这次,Drone已经构建成功,在Docker容器也能看到docker-web是新启动的
1
2
3
| [root@VM-12-3-centos execrunner]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ae1b055b3a docker-web "dotnet DockerWeb.dll" About a minute ago Up About a minute 443/tcp, 0.0.0.0:8880->80/tcp, :::8880->80/tcp
|