当前位置: 首页 > news >正文

drone的简单使用

(一)简介

Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件,将代码推送到 git 仓库,Drone就能够自动化的进行编译、测试、发布。可以与Docker完美集成。

drone官方文档

(二)持续部署概述

持续部署是能以自动化方式,频繁而且持续性的,将软件部署到生产环境。使软件产品能够快速迭代。

平常部署项目时,都是手动进行部署,流程如下

push代码到git
服务器上拉取代码
使用代码打包镜像
推送镜像仓库
服务器拉取新镜像
停止和移除旧容器
启动新容器

这一整套部署步骤枯燥又费时。持续部署就是使用工具自动处理整套步骤。代码在提交之后自动执行整套流程将项目部署到生产环境,省去繁琐的人工操作。

持续部署整套流程本质上是一个极其简单的东西。可以拆解为两个阶段

打包阶段: 拉取代码 —> 编译项目 —> 镜像打包 —> 推送镜像仓库
部署阶段: SSH 连接服务器 —> 拉取新镜像 —> 停止和移除旧容器 —> 启动新容器

未使用自动化部署工具时,也可以使用 shell脚本实现半自动化,下面就用drone实现上面的流程步骤

(三)drone的构成与安装

Drone 应用由 Server(服务器) 和 Runner(执行器) 两种服务构成。

Server(服务器) 主要负责管理和展示, Runner(执行器) 主要负责执行操作。Server服务,它是一个守护进程应用并且拥有Web管理界面。它通过Webhook对接Git Server。解析Git Repository根目录下的.drone.yml文件,并以轮询的形态查找需要执行的Pipelines,路由并管理Runners。Runner(执行器) 是真正执行持续部署操作服务

在安装drone前得先配置一下gitee仓库的权限 gitee配置示例,这里使用gitee仓库,你也可以使用gitlab,github等等,官方文档都有

在这里插入图片描述

需要注意的是按照官方文档里 应用回调地址 后面应该还要加上login(https://drone.example.com/login),点击创建成功后可以得到Client ID和Client Secret这个在创建drone server服务的时候需要

创建drone server服务

docker run \--volume=/root/docker/drone:/data \--env=DRONE_GITEE_CLIENT_ID=******* \--env=DRONE_GITEE_CLIENT_SECRET=*******\--env=DRONE_RPC_SECRET=5648b4b6160f75a1bf7b455ae8457be0 \--env=DRONE_SERVER_HOST=ip:port \--env=DRONE_SERVER_PROTO=http \--env=DRONE_USER_CREATE=username:你的gitee用户名,admin:true  \--publish=8888:80 \--restart=always \--detach=true \--name=drone \drone/drone:2

DRONE_GITEE_CLIENT_ID :你的gitee Client ID
DRONE_GITEE_CLIENT_SECRET :你的gitee Client Secret
DRONE_RPC_SECRET:server与runner身份验证的共享密钥,用(openssl rand -hex 16)命令创建的一个密钥
DRONE_SERVER_HOST:drone server的ip和端口,域名也可以
DRONE_USER_CREATE:为drone创建管理员用户,这样在使用gitee第三方登陆时,用户就有了管理员的权限

创建runner服务

docker run --detach \--volume=/var/run/docker.sock:/var/run/docker.sock \--env=DRONE_RPC_PROTO=http \--env=DRONE_RPC_HOST=ip:port    \--env=DRONE_RPC_SECRET=5648b4b6160f75a1bf7b455ae8457be0 \--env=DRONE_RUNNER_CAPACITY=2   \--env=DRONE_RUNNER_NAME=my-first-runner \--publish=3000:3000 \--restart=always \--name=drone-runner \drone/drone-runner-docker:1

–volume=/var/run/docker.sock:/var/run/docker.sock 将docker守护进程的socket挂载到runner里,runnner既可以使用宿主机的docker资源了
DRONE_RPC_HOST:drone的server服务的ip和端口
DRONE_RUNNER_CAPACITY:runner可同时执行pipeline的数量,默认好像就是2
DRONE_RUNNER_NAME:docker runner 名称
–publish=3000:3000 这里映射这个端口的作用暂时还不清楚

创建完成后访问drone server的服务
在这里插入图片描述
点击登陆跳转到gitee登陆授权的页面
在这里插入图片描述
点击同意授权就会以gitee的用户名登陆drone,然后就可以看见自己在gitee上托管的仓库了
在这里插入图片描述
找到自己想自动化构建的仓库,然后点击激活
在这里插入图片描述
勾选Trusted选项,如果没有该选项可能是在创建drone server 服务是没有创建管理员用户导致的,该选项如果没有勾选的话可能会有权限问题
在这里插入图片描述

现在仓库就已经激活了,如果想取消drone自动构建,可以点击左下角的disable

(四)自动化构建逻辑编写

要实现docker runner帮我们自动化构建还有一个核心的步骤就是我们的git仓库的根目录下必须有一个.drone.yml文件,可以简单的理解为, .drone.yml 配置文件相当于一个 .sh 文件,自动化构建和部署的操作配置在这个文件中,交给 Drone runner执行。
gitee仓库链接

所以最核心的就是.drone.yml文件的编写,可以先整一个简单的yml文件

kind: pipeline  # kind 属性定义了对象的种类。此示例定义了一个管道对象。
type: docker    # type 属性定义管道的类型。此示例定义了一个 Docker 管道,其中每个管道步骤都在 Docker 容器内执行。
name: default   # name 属性定义了管道的名称。您可以为您的项目定义一个或多个管道steps: # 步骤部分定义了一系列串行执行的管道步骤。如果管道中的任何步骤失败,管道将立即退出- name: greeting # name 属性定义管道步骤的名称image: alpine # image 属性定义了一个执行 shell 命令的 Docker 镜像。可以使用来自任何 DockerHub 中的任何 Docker镜像。commands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码,则管道步骤将失败。- echo hello- echo world

上面kind定义了该文件是一个pipeline对象,也有其他类型,但自动化构建流程这里选择pipeline即可,type除了docker类型,还有ssh类型,就是使用ssh远程其他主机执行一些编译配置命令,还有exec类型,就是在当前runner主机上执行一些命令,上面文件只定义了一个pipeline流程,一个.drone.yml文件里可以定义多个pipeline它们相互独立,同时执行,但也可以绑定依赖关系,比如有a b两个pipeline,可以使用
depends_on配置参数让b pipeline在a pipeline后执行,并且pipeline还可以用trigger参数设置触发条件,比如说只有git tag改变时才执行某个pipeline等等 ,具体可以参考官方pipeline文档

回到上面的配置文件,每一个pipeline 可以有多个steps,steps之间按照顺序执行,有一个出错就会中断整个pipeline的执行流程,这里的流程是先拉取 git仓库里最新代码(这一步是默认的),然后拉取对应的docker镜像,然后运行docker镜像,并以commands里的命令覆盖docker images的entrypoint,当下一次push代码时,就可以看到如下构建过程

在这里插入图片描述
在这里插入图片描述

下面的配置文件先构建docker镜像推送到docker仓库,然后使用webhook通知,通知过后部署docker服务,然后再使用webhook进行通知
这里使用webhook通知将信息发送到钉钉群组里,webhook本质上就是发送post请求,所以这里使用一个curl的docker镜像发送webhook通知

kind: pipeline  # kind 属性定义了对象的种类。此示例定义了一个管道对象。
type: docker    # type 属性定义管道的类型。此示例定义了一个 Docker 管道,其中每个管道步骤都在 Docker 容器内执行。
name: default   # name 属性定义了管道的名称。您可以为您的项目定义一个或多个管道steps: # 步骤部分定义了一系列串行执行的管道步骤。如果管道中的任何步骤失败,管道将立即退出- name: 构建docker镜像image: plugins/dockersettings:repo: bocai123/nginx_demoauto_tag: truedockerfile: ./Dockerfileusername:from_secret: docker_usernamepassword:from_secret: docker_password- name: 镜像构建完成通知 # name 属性定义管道步骤的名称image: curlimages/curl # image 属性定义了一个执行 shell 命令的 Docker 镜像。您可以使用来自任何 DockerHub 中的任何 Docker镜像。environment:message: 镜像构建完成通知webhook_url:from_secret: webhook_urlcommands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码,则管道步骤将失败。- ./notify.sh #通知脚本when:status: #成功与失败都会执行该步骤- success- failure- name: 部署image: appleboy/drone-sshsettings:host: #远程连接的host ipfrom_secret: hostusername: #用户名from_secret: usernamepassword: #密码from_secret: passwordport: 22script: #部署执行动的命令- echo ====开始部署=======- docker rm -f nginx_demo- docker pull bocai123/nginx_demo- docker run --rm -d --name nginx_demo -p 7777:80  bocai123/nginx_demo- echo ====部署成功======- name: 部署完成通知 # name 属性定义管道步骤的名称image: curlimages/curl # image 属性定义了一个执行 shell 命令的 Docker 镜像。您可以使用来自任何 DockerHub 中的任何 Docker镜像。environment:message: 部署完成通知webhook_url:from_secret: webhook_urlcommands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码,则管道步骤将失败。- ./notify.sh #通知脚本when:status: #成功与失败都会执行该步骤- success- failure

配置文件中from_secret就是在web管理页面配置的键值
在这里插入图片描述

下面是该配置文件对应的构建过程
在这里插入图片描述
钉钉也获取到了通知

(五)结语

至此一个简单的自动化构流程就完成了,drone还有很多酷炫的操作,比如多pipeline配置以trigger的使用等等,如果有什么错误的地方,还请大家批评指正。最后,希望小伙伴们都能有所收获。写这些,仅记录自己学习使用drone的过程
在这里插入图片描述

相关文章:

drone的简单使用

(一)简介 Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件&…...

day 52 | 84.柱状图中最大的矩形

84.柱状图中最大的矩形 本题跟接雨水的思路是差不多的,不同的是接雨水找到的凹,这个找的是凸。因此是找到左右第一个比他小的值。因此单调栈中的顺序是从栈头到栈尾单调增。 需要注意的是,为了防止给定的元素是单调增或者单调减,…...

BUUCTF刷题十一道(08)

文章目录 [HITCON 2017]SSRFme[b01lers2020]Welcome to Earth[CISCN2019 总决赛 Day2 Web1]Easyweb[SWPUCTF 2018]SimplePHP[NCTF2019]SQLi[网鼎杯 2018]Comment[NPUCTF2020]ezinclude[HarekazeCTF2019]encode_and_encode[CISCN2019 华东南赛区]Double Secret[网鼎杯2018]Unfin…...

快速构建基于Paddle Serving部署的Paddle Detection目标检测Docker镜像

快速构建基于Paddle Serving部署的Paddle Detection目标检测Docker镜像 项目介绍需要重点关注的几个文件构建cpu版本的docker构建gpu版本的docker(cuda11.2cudnn8) 阅读提示: (1)Paddle的Serving项目中,在t…...

SOLIDWORKS工程图自动零件序号的极致体验

在装配体工程图中零件序号的标注要求不能漏标、要和明细表项目相对应、位置适当并且要按序排列。 这些要求看似简单,但是却需要极大的精力去完成。当然在SOLIDWORKS中这些问题都被很好的解决了,这也是本次分享的内容。 自动序号标注 1) 在进行尺寸标注前…...

将ROS bag转成CSV

在放了bag包的工作空间下,执行如下命令 rostopic echo -b recorded_bag.bag -p /topic_name > csv_file.csv # -b表示接bag包 # -p表示将消息转为适合matlab或octave plot画图的格式 # recorded_bag.bag是记录下来的bag包 # /topic_name,以/开头&…...

jframe生成柱状图片+图片垂直合并+钉钉机器人推送

需求: 后端根据数据自动生成2个图片,然后把两张图片合并成一张图片,再发到钉钉群里,涉及到定时生成和推送,当时我们测试同事说他们写定时脚本放到服务器上,然后让我提供生成图片的方法和钉钉机器人的逻辑 天…...

如何用J-Link仿真PY32F003系列芯片

在用国产ARM芯片,仿真和烧录是必须的,但KEIL MDK也支持国产芯片在线仿真和下载。相信大家和我一样,苦于不会设置J-Link走了很多弯路。不管你用盗版的,还是正版的,都支持在线仿真和下载,只要是ARM核&#xf…...

# Go学习-Day10

Go学习-Day10 个人博客:CSDN博客 反射 编写函数适配器,序列化和反序列话可以用到 反射可以在运行时,动态获取变量的各种信息,例如类型,结构体本身的信息,修改变量的值,调用关联的方法 反射是…...

vue3:5、组合式API-reactive和ref函数

<script setup> /* reactive接收一个对象类型的数据&#xff0c;返回一个响应式的对象 *//*** ref:接收简单类型或复杂类型&#xff0c;返回一个响应式对象* 本质&#xff1a;是在原有传入数据的基础上&#xff0c;外层报了一层对象&#xff0c;包成了复杂类型* 底层&…...

Unity Inspector面板上显示Api

serializeField】——将私有类型和保护类型可视化到面板上【System.serializeField】——将自定义类型可视化到面板上【HideIninspector】——将公共变量隐藏【Header&#xff08;“分组说明”&#xff09;】——将可视化变量进行分组【Tooltip&#xff08;“内容说明”&#x…...

Redis功能实战篇之附近商户

在互联网的app当中&#xff0c;特别是像美团&#xff0c;饿了么等app。经常会看到附件美食或者商家&#xff0c; 当我们点击美食之后&#xff0c;会出现一系列的商家&#xff0c;商家中可以按照多种排序方式&#xff0c;我们此时关注的是距离&#xff0c;这个地方就需要使用到我…...

selenium 自动化测试——元素定位

WebDriver 提供了8种元素的定位方法&#xff0c;分别是&#xff1a; id 定位&#xff1a;find_element(By.ID, "kw") name 定位: find_element(By.NAME, "") tag 定位: find_element(By.TAG, "") class 定位: find_element(By.CLASS_NAME, &quo…...

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中&#xff0c;各类业务系统非常丰富&#xff0c;相互之间或对外提供很多的服务或接口这些服务或接口中&#xff0c;有很多是需要强契约约束的&#xff0c;服务的提供方、服务的使用方必须遵守相同契约这类服务最典型的就是RPC&#xff0c;其中应用广泛的有Dub…...

手机SSL证书认证失败是什么意思?

手机SSL证书认证失败是指在使用手机设备浏览网站时&#xff0c;由于SSL证书的认证问题&#xff0c;导致无法建立安全的加密连接。本文将详细介绍手机SSL证书认证失败的含义、可能的原因以及解决方法&#xff0c;帮助用户了解并解决该问题&#xff0c;以确保手机端浏览的数据传输…...

PXE网络批量装机(centos7)

目录 前言 一、实验拓扑图 二、PXE的组件 三、配置PXE装机服务器 1、设置防火墙、selinux 2.安装、启动vsftp 3、拷贝系统文件到/var/ftp用于装机 4、配置tftp 5、准备pxelinx.0文件、引导文件、内核文件 6、配置本机IP 7、配置DHCP服务 8、创建default文件 四、配…...

P1104 生日

题目描述 cjf 君想调查学校 OI 组每个同学的生日&#xff0c;并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多&#xff0c;没有时间&#xff0c;所以请你帮她排序。 输入格式 输入共有 n 1 n 1 n1 行&#xff0c; 第 1 1 1 行为 OI 组总人数 n n n&#xff1b; …...

计算机网络复习大纲

第一章 计算机网络概述 一&#xff0c;网络发展的形态 了解&#xff1a;当前网络的组成形态&#xff1a; 二&#xff0c;计算机网络的定义 掌握 网络的物理组成实体 网络的工作方式 网络组建的目的 三&#xff0c;通过网络定义 我们如何学习网络 物理实体如何构成&…...

Linux:进程(概念)

学习目标 1.认识冯诺依曼系统 2.认识操作系统概念与定位 (系统调用接口) 3.理解进程的概念&#xff08;PCB&#xff09; 4.理解进程的状态&#xff08;fork创建进程&#xff0c;僵尸进程及孤儿进程&#xff09; 5.了解进程的调度&#xff08;优先级&#xff0c;竞争性&#xff…...

智能机器人:打造自动化未来的关键技术

文章目录 1. 智能机器人的基本概念2. 智能机器人的关键技术2.1 机器视觉2.2 机器学习与深度学习2.3 传感器技术 3. 智能机器人的应用领域3.1 制造业3.2 医疗保健3.3 农业3.4 服务业 4. 智能机器人的未来趋势4.1 自主决策能力的提升4.2 协作与互操作性4.3 个性化定制4.4 环境感知…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...