部署drone实现ci/cd
git私服搭建
一、Gitea创建OAuth2应用程序
git仓库地址http://49.235.6.235:3000/
进入Gitea-->点击右上角头像-->设置-->应用-->管理OAuth2应用程序
来创建一个OAuth2应用程序
这里的重定向URL是授权成功后跳转到drone的地址,根据自己的drone地址来创建

创建成功后就可以拿到客户端ID和客户端密钥了,这里可以先记录下来,我们后边会用到,因为一旦离开这个页面就没法再查看密钥了,只能重新生成
二、编写docker-compose.yml文件
这里我们通过使用 Docker Compose 来构建并启动 Drone和 Docker Runner,编写 docker-compose.yml 文件
mkdir /home/docker/drone
cd /home/docker/drone
vim docker-compose.yml
在配置文件中,我们设置 docker-compose.yml 的格式为 3 号版本,定义以下两个docker服务。
- Drone Server:使用drone/drone:1版本镜像,将 drone 容器的 80 端口映射到宿主机的 8082端口。映射容器内 /data 目录到宿主机的 /data/drone 目录,以便 drone 可以保留数据。配置服务自动重新启动,并配置构建 drone 所需的环境变量。
- Docker Runner:使用drone/drone-runner-docker:1版本镜像,将 docker 启动句柄挂载到容器/var/run/docker.sock文件中,以便 drone 可以使用 docker-runner 来执行镜像构建任务。环境变量中需要配置 drone server 的端口协议以及共享密钥,以便与 server 进行通信。
- 具体配置可参考如下配置:
version: '3'
services:
# 容器名称
fan-drone-server:
# 构建所使用的镜像
image: drone/drone:1
# 映射容器内80端口到宿主机的7079端口
ports:
- 8082:80
# 映射容器内/data目录到宿主机的/data/drone目录
volumes:
- /data/drone:/data
# 容器随docker自动启动
restart: always
environment:
# Gitea 服务器地址
- DRONE_GITEA_SERVER=http://49.235.6.235:3000
# Gitea OAuth2客户端ID
- DRONE_GITEA_CLIENT_ID=afa9c9e9-802d-4ce3-a1e6-4d81d98bf3ad
# Gitea OAuth2客户端密钥
- DRONE_GITEA_CLIENT_SECRET=OglyfNgftu6t7RZjZl1tTz764VGKzyDmc98IAdWlnet6
# drone的共享密钥
- DRONE_RPC_SECRET=asdfsadfasdfsadfsadfasdf
# drone的主机名
- DRONE_SERVER_HOST=192.168.31.254:8082
# 外部协议方案
- DRONE_SERVER_PROTO=http
# 创建管理员账户,这里对应为gitea的用户名
- DRONE_USER_CREATE=username:zhangwei,admin:true
fan-docker-runner:
image: drone/drone-runner-docker:1
ports:
- 7080:3000
restart: always
depends_on:
- fan-drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
# 用于连接到Drone服务器的协议。该值必须是http或https。
- DRONE_RPC_PROTO=http
# 用于连接到Drone服务器的主机名
- DRONE_RPC_HOST=192.168.31.254:8082
# Drone服务器进行身份验证的共享密钥,和上面设置一样
- DRONE_RPC_SECRET=asdfsadfasdfsadfsadfasdf
# 限制运行程序可以执行的并发管道数。运行程序默认情况下执行2个并发管道。
- DRONE_RUNNER_CAPACITY=2
# docker runner 名称
- DRONE_RUNNER_NAME=fan-docker-runner-1

红色方框内容根据实际情况修改
构建drone和runner
docker-compose up -d
-d 为后台运行
三、配置drone
打开drone http://192.168.1.1:8082
到这里如果没有出问题的话drone就构建完成了,我们在浏览器输入配置的drone地址,可看到自动跳转到gitea的授权页面
这里我们进行授权后就跳转到drone的页面了,只需授权一次即可,往后我们登录了gitea就直接进入drone了
进入drone会看到未激活的仓库,我们点击激活它
进入git仓库
我们会看到仓库已经自动配置好了web钩子
检测链接是否正常
可以进去测试钩子,一般是没问题的
到这里我们的drone就安装完毕了,激活仓库后,我们向仓库推送一个commit,gitea就会发送消息通知drone去干活啦~
四、配置Drone自动构建
drone的安装过程还是很简单的,下面我们来进行drone构建的配置
drone支持不同环境的不同管道配置,这里我使用Docker Pipelines管道配置
简单来说就是drone的每一步操作都在一个临时的drone的容器中进行,容器操作完会自动销毁,容器之间会共享当前的工作目录
1.本地部署
本地部署主要步骤:
drone拉取最新的代码到当前工作目录
drone创建maven/grade容器,通过指定的构建工具maven/grade等将代码编译/打包为jar包,然后将jar包和
drone创建ssh容器,在容器中通过ssh连接到宿主机,通过定义好的命令,到jar和Dockerfile目录中将jar包制作构建为镜像,然后通过镜像创建应用容器并运行,期间会删除之前老的应用程序容器和镜像
2.编写drone部署的文件
在仓库的根目录下创建.drone.yml配置文件
配置文件参考如下配置:
# drone 本地构建
kind: pipeline
type: docker
name: bladex-boot
# drone构建步骤
steps:
# 1.maven打包
- name: maven compile
image: maven:3.6.2-jdk-8
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
- name: maven-build
path: /home # 将应用打包好的Jar和执行脚本挂载出来
commands:
- mvn clean package -q
- cp doc/script/fatjar/service.sh /home #复制启动脚本到宿主机
- cp target/blade-api.jar /home/app.jar #复制打包好的文件到宿主机
when: # 触发事件
branch: master
event: [ push ]
- name: startup
image: appleboy/drone-ssh # SSH工具镜像
settings:
host: 192.168.31.254 # 远程连接地址
username: root # 远程连接账号
password:
from_secret: ssh_password # 从Secret中读取SSH密码 在drone服务器中配置
port: 22 # 远程连接端口
command_timeout: 5m # 远程执行命令超时时间
script:
- cd /home/docker/drone # 进入宿主机构建目录
- chmod +x service.sh # 更改为可执行脚本
- ./service.sh restart # 运行脚本打包应用镜像并运行
volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /home/docker/drone # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /root/.m2
# drone执行触发器
trigger:
branch:
- master
drone中存储密码的方式
相关文档
https://www.ffis.me/archives/1988.html
https://www.cnblogs.com/dxp909/p/11585904.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!