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的过程
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中,数组A[]中的元素与[0,n)内的编号一一对应,A[0],A[1],...,A[n-1];反之,每个元素均由(非负)编号唯一指代,并可直接访问A[i] 的物理地址 Ai s,s 为单…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行,\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

系统架构设计师(第二版)学习笔记----嵌入式系统及软件

【原文链接】系统架构设计师(第二版)学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…

自己的碎碎念集合

自己的碎碎念集合 2023-09-11 C语言定义 `int *p,q;` p, q类型是否一样2023-09-07 c++叠加三目运算符闰年计算法2023-08-13 一个小题目 A+B problem一、问题及解答关碍总结2023-07-26 C的2至36进制转换函数一、itoa()函数的示例代码总结2023-07-19 平面坐标下判断三角形以及输出…

十八、MySQL添加外键?

1、外键 外键是用来让两张表的数据之间建立联系,从而保证数据的一致性和完整性。 注意,父表被关联的字段类型,必须和子表被关联的字段类型一致。 2、实际操作 (1)初始化两张表格: 子表: 父…

哪个矩阵系统管理最好用?如何同时管理1000个账号和发布视频?

软件图片素材来自于公众号:生财风暴 关注进行领取价值1000元的采集软件,和呆头鹅批量剪辑和矩阵管理系统演示 实体店老板如何用抖音进行推广? 【方式一:找网红达人拍视频帮忙推广店铺,但是成本收费相对于比较高 ​【方…

PHP 排序函数使用方法,按照字母排序等操作

详解PHP排序方法使用 一、sort() 函数 用于对数组单元从低到高进行排序。 //数组 $data array(D,F,A,C,B); //排序 sort($data); //输出排版标签 echo "<pre>"; //打印数据 print_r($data);die;输出结果&#xff1a; 二、rsort() 函数 用于对数组单元从高到…

保姆级-微信小程序开发教程

一&#xff0c;注册微信小程序 如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信&#xff0c;我们选择 “小程序” 即可。 接着填写账号信息&#x…

怎样获取字符串数组的长度_使用sizeof(array) / sizeof(array[0])

使用sizeof() C、C中没有提供直接获取数组长度的函数&#xff0c;对于存放字符串的字符数组提供了一个strlen函数获取长度&#xff0c;那么对于其他类型的数组如何获取他们的长度呢&#xff1f; 其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时…

如何将两台Mac显示器设置为单个屏幕配置

​能够在扩展模式下将两个或多个外部显示器连接到Mac是一种解放的屏幕体验&#xff0c;但当每个显示器仍然像独立显示器一样工作时&#xff0c;会导致沮丧。 在这里&#xff0c;我们向你展示如何通过对系统设置进行一些简单的更改&#xff0c;使两个扩展屏幕看起来像一个屏幕。…

【代码随想录day24】不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xf…

数据结构与算法基础-学习-32-选择排序之简单选择排序、堆排序

目录 一、简单选择排序基本思路 二、简单选择排序基本操作 三、简单选择排序算法思路 四、简单选择排序代码 1、SimpleSelectSortSentrySqQueue 五、简单选择排序算法分析 1、记录移动次数 2、记录比较次数 六、简单选择排序Linux环境编译测试 七、堆的定义 八、堆调…

A6120 Emerson 机箱地震振动监测器

A6120 Emerson 机箱地震振动监测器 艾默生过程管理公司宣布&#xff0c;PlantWeb数字工厂架构已经安装在化学工业CATCH(技术能力评估中心)培训中心&#xff0c;该中心位于北林肯郡格里姆斯比附近的Stallingborough。这座价值820万英镑的设施是为了满足行业对培训中心的需求而开…

教师如何私密发布成绩查询?

随着科技的不断发展&#xff0c;教育领域也逐渐引入了各种在线工具来提高教学效果和管理效率。其中&#xff0c;易查分作为一款功能强大的在线查询工具&#xff0c;帮助老师们更好的利用该工具进行成绩查询。 好消息&#xff01;博主给大家争取到的易查分福利&#xff0c;只需要…

C++中的红黑树

红黑树 搜索二叉树搜索二叉树的模拟实现平衡搜索二叉树(AVL Tree)平衡搜索二叉树的模拟实现红黑树(Red Black Tree)红黑树的模拟实现 红黑树的应用(Map 和 Set)Map和Set的封装 搜索二叉树 搜索二叉树的概念&#xff1a;二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

电脑文件批量重命名:高效操作技巧

随着时间的推移&#xff0c;我们积累的文件和文件夹数量越来越多&#xff0c;需要对它们进行合理的命名和管理&#xff0c;以便更方便地查找和利用。而文件批量重命名功能可以帮助我们更高效地管理文件夹。下面介绍五种方式&#xff0c;帮助你更好地利用文件批量重命名工具&…

leetcode刷题--栈与递归

文章目录 1. 682 棒球比赛2. 71 简化路径3. 388 文件的最长绝对路径4. 150 逆波兰表达式求值5. 227. 基本计算器II6. 224. 基本计算器7. 20. 有效的括号8. 636. 函数的独占时间9. 591. 标签验证器10. 32.最长有效括号12. 341. 扁平化嵌套列表迭代器13. 394.字符串解码 1. 682 棒…

算法之双指针题型:

双指针例题小总结&#xff1a; 力扣27&#xff1a; 移除元素 力扣题目链接 双指针分为&#xff1a; 快慢双指针&#xff1a;同一个起点&#xff0c;同向出发 相向双指针&#xff1a;从两端出发&#xff0c;方向相反&#xff0c;终会相遇 经典的双指针&#xff08;快慢双指…

消息队列理解

rocketMQ RocketMQ消息存储原理_码上得天下的博客-CSDN博客 领域模型概述 | RocketMQ kafka Kafka基本架构介绍-腾讯云开发者社区-腾讯云 看完这篇Kafka&#xff0c;你也许就会了Kafka_心的步伐的博客-CSDN博客 Apache Kafka

技术解码 | GB28181/SIP/SDP 协议--EasyGBS国标GB28181平台国标视频技术SDP解析

EasyGBS去年更换了新内核&#xff0c;新内核版本的平台性能更加稳定&#xff0c;我们也在不断对平台进行持续的功能优化和升级&#xff0c;始终保持EasyGBS平台在安防视频监控市场的技术先进性。EasyGBS拥有视频直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台…