1. 介绍



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

https://docs.drone.io/

特点

  • Drone引入了Pipelnes的概念,管道可帮助我们自动化软件交付过程中的步骤,例如启动代码构建,运行自动化测试以及部署到暂存或生产环境。
  • 通过将.drone.yml文件放在git信息库的根目录中来配置管道。 yaml语法旨在易于阅读和表达,以便查看存储库的任何人都可以理解工作流程。
  • Drone通过多个step来完成一系列的指令。

为什么选择Drone?

  • 和 Jenkins 相比, Drone 就轻量的多了,从应用本身的安装部署到流水线的构建都简洁的多。由于是和源码管理系统相集成,所以 Drone 天生就省去了各种账户权限的配置,直接与 gitlab 、 github 、 Bitbucket 这样的源码管理系统操作源代码的权限一致

  • Drone 与流行的源代码管理提供商无缝集成,支持github、gitlab、gogs、gitea、gitee、bitbucket server/cloud, 这是使用Drone的第一印象,可以实行快速打造GitOps场景

  • 流水线插件是执行预定义任务的 Docker 容器,通过将它们配置为Pipeline中的步骤。插件可用于部署代码、发布工件、发送通知等。



2. 部署Gogs-极易搭建的自助 Git 服务

安装MySQL

docker run --name gogs-mysql --restart=always -v /opt/mysql/mysqlVolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.19

创建Gogs及drone数据库

mysql -uroot -p123456 -h 127.0.0.1

CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

create database drone;

Pull image from Docker Hub.

$ docker pull gogs/gogs

Create local directory for volume.

$ mkdir -p /var/gogs

运行Gogs

docker run --name=gogs --restart=always --link gogs-mysql:db -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs

账号:admin

密码:123456

打开页面继续配置Gogs

3. 部署Drone-Server

docker run \ --volume=/var/lib/drone:/data \ --env=DRONE_AGENTS_ENABLED=true \ --env=DRONE_GOGS_SERVER=http://192.168.31.112:10080 \ --env=DRONE_RPC_SECRET=123456 \ --env=DRONE_SERVER_HOST=192.168.31.112 \ --env=DRONE_SERVER_PROTO=http \ --env=DRONE_LOGS_TRACE=true \ --publish=801:80 \ --publish=4431:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:2.0.2

  • DRONE_GOGS_SERVER:这里使用的是gogs作为git仓储,当然drone也支持github,gitlab等一些主流的源码管理平台,不同的平台需要设置不同的环境变量
  • DRONE_RPC_SECRET:与agent之间通信的密钥,一定要配置
  • DRONE_SERVER_HOST:设置drone server使用的host名称,可以是ip地址加端口号
  • DRONE_SERVER_PROTO:使用的协议http/https
  • DRONE_USER_CREATE:设置初始的管理员,这个是超级管理员
  • DRONE_LOGS_TRACE:启动日志,默认是关闭的
  • DRONE_OPEN 开启注册,此配置允许任何人自注册和登录系统

4. 激活仓库配置Webhook

  • 1 登录drone激活仓库
  • 2 在仓库创建.drone.yml文件
  • 3 检查仓库的webhooks配置是否正常



激活之后,自动就会在gogs仓库的Web设置中创建钩子

当不存在.drone.yml文件或者仓库没有在drone激活,测试返回的报文可能是dial tcp连接失败。

5. 部署Drone-Runner

Drone CI提供了多种runtime,可以利用docker方式运行,也可以通过传统ssh方式运行,也可以采用k8s作为runtime;Drone CI实现了一个可拓展的runner架构,方便实现各种runner。Drone Runner是独立的守护程序,用于轮询服务器以执行挂起的Pipeline。有不同类型的Runner针对不同的用例和运行时环境进行了优化。成功安装Drone Server后,必须安装一个或多个运行器。

使用ssh-runner

用 SSH 协议在静态远程服务器上执行管道命令。管道命令直接在远程服务器上执行,没有隔离,使用默认 shell。出于安全原因,此运行器不适合不受信任的工作负荷。

docker run -d \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.31.112:801 \ -e DRONE_RPC_SECRET=123456 \ -p 4001:3000 \ --restart always \ --name runner-ssh \ drone/drone-runner-ssh

使用 docker runner

针对可以在无状态容器中运行测试和编译代码的项目进行了优化; 不太适合无法在容器内运行测试或编译代码的项目,包括面向 Docker 不支持的操作系统或体系结构(如 macOS)的项目。Docker 运行器也不太适合需要在管道执行之间在主机上存储文件或文件夹的有状态管道

docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.31.112:801 \ -e DRONE_RPC_SECRET=123456 \ -e DRONE_RUNNER_CAPACITY=10 \ -e DRONE_RUNNER_NAME=${HOSTNAME} \ -p 4002:3000 \ --restart always \ --name runner-docker \ drone/drone-runner-docker:1

  • DRONE_RPC_HOST:上面启动server时配置的host
  • DRONE_RPC_SECRET:跟server配置的要保持一致
  • DRONE_RUNNER_CAPACITY:可以同时执行的任务数
  • DRONE_RUNNER_NAME:一般设置为主机名

6. 配置.drone.yml运行Pipeline

要使用 Drone 只需在项目根创建一个 .drone.yml 文件即可,这个是 Drone 构建脚本的配置文件,它随项目一块进行版本管理,开发者不需要额外再去维护一个配置脚本。其实现代 CI 程序都是这么做了, 包括 gitlab-ci, jenkinsfile, tekton等。



7 . Drone的场景使用

1) 启动新build

支持选择git 分支, 以及设置启动参数, 这个功能在大部分构建平台都有体现

2) 同步-SYNC

点击 SYNC 按钮,就会和代码仓库进行同步,如果有仓库删除或者增加,就会同步进行更新

3) 定时触发器-Cron jobs



几乎所有的构建平台都会提供类似的触发器,比如 git web hook, 时间定时器等

4) 加密参数 - Secrets

流水线执行过程中会涉及很多和服务交互,所以需要提供各种凭证,比如密码,token 等,所以Secrets也是流水线中的一个重要元素。



5) 版本部署/回滚 -Promote/Rollback

仅仅完成制品的构建是远远不够的,Drone也考虑到了部署和回滚的问题,所以提供了promote/rollbakc事件, 针对 某个成功版本进行部署或者回滚,和条件判断when一起使用。

6)步骤间顺序依赖- 有向无环图

Drone 通过 **kind:pipeline **对步骤进行组织,支持并行流水线,同时通过 **depends_on **对流水线的先后顺序进行限制, 如图所示。



7 )上下游流水线间调用

参考

总结

  1. Drone与代码管理平台(e.g. gitlab, gogs)是强绑定关系,如果代码管理平台不能访问,Drone就无法登录,这个在Drone-Server的启动命令就可以看出来。
  2. Drone 学习成本低,语法简洁,如果你接触过其他构建平台,特别是云原生的,基于YAML进行编排的CI引擎,都是类似的。
  3. Drone是GitOps实践额典型工具,通过和代码仓库进行深度融合,做到了随时提交,随时构建,很多能力都是通过容器插件实现,这也是有别于传统构建系统的重要特点
  4. 从能力上,Drone本身就是轻量级的, 所以相对比较单一,可能无法满足复杂的业务场景。目前Drone已经被收购,成为harness**平台的重要一部分, **在该平台上也可以看到Drone的身影。

Harness CDaaS平台为应用程序交付提供了一种更加无缝的方法,该方法可以自动检测GitHub,Bamboo,Jenkins,Artifactory或Nexus存储库或任何Git存储库中的新版本。一旦DevOps团队收到警报,他们可以使用图形工具不仅使用YAML文件自动化构建管道的过程,还可以利用机器学习算法评估部署的质量,然后在必要时通过从工具访问数据自动回滚例如AppDynamics,New Relic,Splunk,Elastic Search和Sumologic,并添加了Habib。



基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone的更多相关文章

  1. HiEngine:可媲美本地的云原生内存数据库引擎

    摘要:HiEngine与华为GaussDB (for MySQL)集成,将内存数据库引擎的优势带到云端,并与基于磁盘的引擎共存.HiEngine的性能比传统的以存储为中心的解决方案高出7.5倍. 本文 ...

  2. 基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)

    作者|刘浩杨 来源|尔达 Erda 公众号 ​ 本文整理自刘浩杨在 GopherChina 2021 北京站主会场的演讲,微信添加:Erda202106,联系小助手即可获取讲师 PPT. 前言 当今时 ...

  3. 阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!

    作者| 阿里云技术专家 郑云龙(砧木) 目前越来越多的开发者开始采纳 Kubernetes 管理基础设施环境,并通过 Kubernetes 完成日常的开发,测试以及生产发布活动,为了能够有效的帮助开发 ...

  4. VMware vSphere 7.0 Update 2 发布 - 数据中心虚拟化和 Kubernetes 云原生应用引擎

    2021 年 3 月 9 日,VMware 发布了 vSphere 7 Update 2.它可以通过 VMware Customer Connect 和 vSphere Lifecycle Manag ...

  5. 云原生流水线 Argo Workflow 的安装、使用以及个人体验

    注意:这篇文章并不是一篇入门教程,学习 Argo Workflow 请移步官方文档 Argo Documentation Argo Workflow 是一个云原生工作流引擎,专注于编排并行任务.它的特 ...

  6. 阿里云 CDN 业务基于边缘容器的云原生转型实践

    导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...

  7. 腾讯TencentOS 十年云原生的迭代演进之路

    导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...

  8. 最佳案例 | 游戏知几 AI 助手的云原生容器化之路

    作者 张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作. 游戏知几 随着业务不断的拓展,游戏知几AI智能问答机器人业务已经覆盖了自研游戏.二方.海外的多款游戏.游戏知几研发团 ...

  9. 开放融合 | “引擎级”深度对接!POLARDB与SuperMap联合构建首个云原生时空平台

    阿里巴巴新一代自研云数据库POLARDB与超图软件SuperMap GIS实现 “引擎级”深度对接,构建了自治.弹性.高可用的云原生时空数据管理平台联合解决方案,推出了业界首个“云原生数据库+云原生G ...

随机推荐

  1. 增删改查简单的sql语句

    insert INSERT   INTO    t_stu   (name,age)  VALUES  ('wang',12) INSERT INTO    t_stu   VALUES(NULL,' ...

  2. Java线程--CyclicBarrier使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867687.html Java线程--CyclicBarrier使用, 代码里头有详细注释: ...

  3. mybatis 字段类型映射一览表

  4. 简单的JSON数组转树形结构

    function toTree(data) { let result = [] if(!Array.isArray(data)) { return result } data.forEach(item ...

  5. 【HDU6687】Rikka with Stable Marriage(Trie树 贪心)

    题目链接 大意 给定\(A,B\)两个数组,让他们进行匹配. 我们称\(A_i\)与\(B_j\)的匹配是稳定的,当且仅当目前所剩元素不存在\(A_x\)或\(B_y\)使得 \(A_i\oplus ...

  6. 流程控制( if while )

    目录 流程控制 必知必会 分支结构 if 1.单 if 分支结构 2. if与else连用 3. if, else和 elif if 判断之嵌套 if 练习题 while 循环 while+break ...

  7. Solution -「NOI 2016」「洛谷 P1587」循环之美

    \(\mathcal{Description}\)   Link.   给定 \(n,m,k\),求 \(x\in [1,n]\cap\mathbb N,y\in [1,m]\cap \mathbb ...

  8. Solution -「AGC 012F」「AT 2366」Prefix Median

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_{2n-1}\}\),将 \(\{a_{2n-1}\}\) 按任意顺序排列后,令序列 \(b_i\) 为前 ...

  9. 排查log4j不输出日志到文件的问题

    问题描述 项目使用Spring Boot框架,在pom文件中添加了如下配置: <dependency> <groupId>org.slf4j</groupId> & ...

  10. k8s集群节点ping不通其他主机的ip

    文章目录 排查过程 本地宿主机网络检查 pod网络检查 tcpdump检查网络 检查flannel网卡 检查宿主机网卡 iptables检查 解决方法 测试环境服务出现问题,服务一直报错认证超时,检查 ...