Cirry's Blog

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

Jan 8, 2025
docker docker
5分钟
814字

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

Gitea创建OAuth

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

default

default

创建共享秘钥

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

default

安装Drone和Runner

services:
drone-server:
restart: always
image: drone/drone:2
ports:
- "9080:80"
volumes:
- ./drone:/var/lib/drone/
- ./data:/data/
- /var/www/blog:/dist # 挂载博客目录
environment:
- DRONE_GITEA_SERVER=http://gitea服务器地址 # 支持http, https
- DRONE_GITEA_CLIENT_ID=gitea生成的OAuth2客户端ID
- DRONE_GITEA_CLIENT_SECRET=gitea生成的OAuth2客户端密钥
- DRONE_SERVER_HOST=drone服务器地址
16 collapsed lines
- DRONE_SERVER_PROTO=http # 支持http, https
- DRONE_RPC_SECRET=自定义的Drone与runner通信密钥
drone-runner-docker:
restart: always
image: drone/drone-runner-docker:1
ports:
- "9300:3000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http # 支持http, https
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=自定义的Drone与runner通信密钥
- DRONE_RUNNER_NAME=drone-runner-docker
- DRONE_RUNNER_CAPACITY=2

启用docker-compose:

Terminal window
dcoker compose up -d

查看是否正常运行:

root@VM-12-5-debian:~/docker-compose/drone# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
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
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
root@VM-12-5-debian:~/docker-compose/drone# docker logs 009b9af35d4c
time="2025-01-08T03:04:00Z" level=info msg="starting the server" addr=":3000"
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

# ...
time="2025-01-08T03:06:04Z" level=info msg="successfully pinged the remote server"
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
# ...

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

default

点击Continue跳转到授权页面。

default

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

default

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

default

Drone的基本用法

第一步

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

default

第二步

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

default

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

示例

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

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

default

本文标题:Docker安装CI/CD工具Drone实现自动化部署博客
文章作者:Cirry
发布时间:Jan 8, 2025
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode
总访问量
总访客数人次