文档地址: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:

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文件后提交,就可以正常运行流水线了。

示例

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