Docker实践之基于Drone实现CI/CD

Docker实践之基于Drone实现CI/CD

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

安装DroneServer端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

Docker实践之基于Drone实现CI/CD

https://blogs.52fx.biz/posts/887910557.html

作者

eyiadmin

发布于

2021-12-29

更新于

2024-05-31

许可协议

评论