Cirry's Blog

Docker安装CI/CD工具Drone实现自动化部署博客

2025-01-08
docker docker
5分钟
814字

文档地址:Drone官方文档搭配Gitea

Gitea创建OAuth

点击右上角个人头像 -> 设置 -> 应用 -> 管理OAuth2应用程序 中添加Drone应用。

default

default

创建共享秘钥

1
openssl rand -hex 16
2
3
# 在windwos的terminal中可能无法直接使用此条命令
4
# 可以在git-bash中使用此条命令

default

安装Drone和Runner

1
services:
2
drone-server:
3
restart: always
4
image: drone/drone:2
5
ports:
6
- "9080:80"
7
volumes:
8
- ./drone:/var/lib/drone/
9
- ./data:/data/
10
- /var/www/blog:/dist # 挂载博客目录
11
environment:
12
- DRONE_GITEA_SERVER=http://gitea服务器地址 # 支持http, https
13
- DRONE_GITEA_CLIENT_ID=gitea生成的OAuth2客户端ID
14
- DRONE_GITEA_CLIENT_SECRET=gitea生成的OAuth2客户端密钥
15
- DRONE_SERVER_HOST=drone服务器地址
16 collapsed lines
16
- DRONE_SERVER_PROTO=http # 支持http, https
17
- DRONE_RPC_SECRET=自定义的Drone与runner通信密钥
18
19
drone-runner-docker:
20
restart: always
21
image: drone/drone-runner-docker:1
22
ports:
23
- "9300:3000"
24
volumes:
25
- /var/run/docker.sock:/var/run/docker.sock
26
environment:
27
- DRONE_RPC_PROTO=http # 支持http, https
28
- DRONE_RPC_HOST=drone-server
29
- DRONE_RPC_SECRET=自定义的Drone与runner通信密钥
30
- DRONE_RUNNER_NAME=drone-runner-docker
31
- DRONE_RUNNER_CAPACITY=2

启用docker-compose:

Terminal window
1
dcoker compose up -d

查看是否正常运行:

1
root@VM-12-5-debian:~/docker-compose/drone# docker ps -a
2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3
a349ab3b348a drone/drone:2 "/bin/drone-server" 17 seconds ago Up 17 seconds 443/tcp, 0.0.0.0:9080->80/tcp, :::9080->80/tcp drone-drone-server-1
4
009b9af35d4c drone/drone-runner-docker:1 "/bin/drone-runner-d…" 17 seconds ago Up 17 seconds 0.0.0.0:9300->3000/tcp, :::9300->3000/tcp drone-drone-runner-docker-1
5
6
root@VM-12-5-debian:~/docker-compose/drone# docker logs 009b9af35d4c
7
time="2025-01-08T03:04:00Z" level=info msg="starting the server" addr=":3000"
8
time="2025-01-08T03:04:01Z" level=error msg="cannot ping the remote server" error="Post \"https://drone.cirry.cn/rpc/v2/ping\": remote error: tls: internal error"

提示没有ping通,是因为我还没有配置域名加上反代,需要在域名解析中添加drone.cirry.cn的地址解析,在服务器中配置caddy的反代。

完成上述操作后再查看一下日志,提示了successfully pinged the remote server

1
# ...
2
time="2025-01-08T03:06:04Z" level=info msg="successfully pinged the remote server"
3
time="2025-01-08T03:06:04Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="https://drone.cirry.cn" kind=pipeline os=linux type=docker
4
# ...

这个时候打开我们的drone.cirry.cn网站就可以看到页面了。

default

点击Continue跳转到授权页面。

default

点击应用授权后,重新跳转到drone的登录页。

default

填写个人信息后点击SUBMIT进入个人仓库页面。

default

Drone的基本用法

第一步

默认每一个仓库都是不活动的,所以需要启用CI/CD的仓库,点击对应的仓库名称后,再点击ACTIVE REPOSITORY

default

第二步

在仓库的设置页面中打开Trusted按钮后保存配置。

default

接下来,在代码仓库根目录中编写.drone.yml文件后提交,就可以正常运行流水线了。

示例

.drone.yml
1
kind: pipeline # 定义一个管道
2
type: docker # 当前管道的类型
3
load: ""
4
name: deploy-astro-blog # 当前管道的名称
5
volumes: # 声明数据卷(此为服务器中的实际目录)
6
- name: node_modules # 数据卷名称
7
host: # Host Volume
8
path: /root/drone/blog/node_modules # 宿主机目录,绝对路径,缓存node_modules
9
- name: dist
10
host:
11
path: /var/www/blog/dist # 博客部署路径,绝对路径,打包目录
12
clone:
13
disable: false # 启用代码
14
depth: 1
15
commands:
16 collapsed lines
16
- git remote -v
17
steps: # 定义管道的执行步骤
18
- name: build
19
image: gplane/pnpm:9.4.0 # 当前步骤使用的镜像
20
pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
21
depends_on: [ clone ] # 依赖的步骤
22
volumes: # 挂载数据卷(此为容器内的目录)
23
- name: node_modules # 数据卷名称,相当于把node_modules挂载在下面的路径上
24
path: /drone/src/node_modules # 容器内目录 绝对路径
25
- name: dist
26
path: /drone/src/dist
27
commands: # 当前步骤执行的命令
28
- ls
29
- pnpm config set registry https://registry.npmmirror.com # 切换源
30
- pnpm i # 安装node_modules包
31
- pnpm run build # 执行编译

打包速度还行,以后不用在使用脚本来跑了。

default

本文标题:Docker安装CI/CD工具Drone实现自动化部署博客
文章作者:Cirry
发布时间:2025-01-08
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode