首页 > 其他分享 >基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone

时间:2023-06-11 19:02:11浏览次数:47  
标签:-- gogs Gogs Drone drone DRONE docker 轻量级

1. 介绍

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker


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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_02

特点

  • 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中的步骤。插件可用于部署代码、发布工件、发送通知等。

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_03


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_04

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_05

安装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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_06

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_07

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配置是否正常

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_08


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_09

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

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_10

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:一般设置为主机名

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_11

6. 配置.drone.yml运行Pipeline

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_12


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_13

源码地址: https://gitee.com/devops-samples/drone-examples

7 . Drone的场景使用

1) 启动新build

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_14

2) 同步-SYNC

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_15

3) 定时触发器-Cron jobs

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_16


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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_17

4) 加密参数 - Secrets

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_18


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_19

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

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_20

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_docker_21

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

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

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_22


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_23

7 )上下游流水线间调用

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_24

参考

  • drone pipeline - https://docs.drone.io/pipeline/overview/
  • drone 流水线配置 - https://docs.drone.io/pipeline/docker/syntax/
  • drone yaml元素 - https://docs.drone.io/yaml/docker/

总结

  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_git_25


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_RPC_26

基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_27


基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone_git_28

标签:--,gogs,Gogs,Drone,drone,DRONE,docker,轻量级
From: https://blog.51cto.com/devopsingroad/6458597

相关文章

  • 聊聊Cola-StateMachine轻量级状态机的实现
    背景在分析Seata的saga模式实现时,实在是被其复杂的json状态语言定义文件劝退,我是有点没想明白为啥要用这么来实现状态机;盲猜可能是基于可视化的状态机设计器来定制化流程,更方便快捷且上手快吧,毕竟可以通过UI直接操作,设计状态流转图,但我暂时不太能get到。对于Saga模式的实现,之前......
  • 【云原生•监控】mtail轻量级日志监控
    【云原生•监控】mtail轻量级日志监控前言「笔者已经在公有云上搭建了一套临时环境,可以先登录体验下:」http://124.222.45.207:17000/login账号:root/root.2020简介「可观测性平台三大支柱:日志监控、调用链监控和度量指标监控,其中最为大家熟知的是日志监控,因为我们开发系统基本都离......
  • Flask-----轻量级的框架,快速的搭建程序(python)
     Flask是一个基于Python开发并且依赖jinja2模板和WerkzeugWSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借......
  • virtink k8s 轻量级虚拟机化扩展
    virtink是基于cloudhypervisor的k8s虚拟化扩展相比kubevirt的一些对比使用了cloudhypervisor,相对更加轻量,没有使用libvirt或者qemu不需要使用longruningpod隔离性更加好,可以更好的支持k8sink8s参考资料https://github.com/smartxworks/virtinkhttps://github.......
  • 推荐一款轻量级 eBPF 前端工具 ply
    1Overviewply是eBPF的front-end前端工具之一,专为embeddedLinuxsystems开发,采用C语言编写,只需libc和内核支持BPF就可以运行,不需要外部kernel模块,不需要LLVM,不需要python。ply由瑞典工程师TobiasWaldekranz开发,其项目主页是PLYLight-weightDynamicTra......
  • Android平台如何实现外部RTSP|RTMP流注入轻量级RTSP服务模块(内网RTSP网关)
     技术背景今天分享的是外部RTSP或RTMP流,拉取后注入到本地轻量级RTSP服务模块,供内网小并发场景下使用,这里我们叫做内网RTSP网关模块。内网RTSP网关模块,系内置轻量级RTSP服务模块扩展,完成外部RTSP/RTMP数据拉取并注入到轻量级RTSP服务模块工作,多个内网客户端直接访问内网轻量级RTSP......
  • Forest轻量级框架的声明式使用
    1.Forest框架声明式接口的基础使用1.1构建接口​在Forest中,所有的HTTP请求信息都要绑定到某一个接口的方法上,不需要编写具体的代码去发送请求。请求发送方通过调用事先定义好HTTP请求信息的接口方法,自动去执行HTTP发送请求的过程,其具体发送请求信息就是该方法对......
  • ICML 2023 | 轻量级视觉Transformer (ViT) 的预训练实践手册
    前言 本文介绍一下最近被ICML2023接收的文章:ACloserLookatSelf-SupervisedLightweightVisionTransformers.文章聚焦在轻量级ViT的预训练上,相当于为相关方向的研究提供了一个benchmark,相关的代码与模型也都会开源,方便后续大家在这一方向上继续探索。文章的研究也打破......
  • 用go设计开发一个自己的轻量级登录库/框架吧(拓展篇)
    给自己的库/框架拓展一下吧(拓展篇)主库:weloe/token-go:alightloginlibrary.扩展库:weloe/token-go-extensions(github.com)本篇给主库扩展一个Adapter提供简单的外部数据存储。思路一个库/框架往往不能完成所有事情,需要其他库/框架的支持才能达到更加完善的效果。本篇会......
  • c#轻量级高并发物联网服务器接收程序源码(仅仅是接收硬件数据程序,没有web端,不是java,协
    c#轻量级高并发物联网服务器接收程序源码(仅仅是接收硬件数据程序,没有web端,不是java,协议自己写,如果问及这些问题统统不回复。),对接几万个设备没问题,数据库采用ef6+sqlite,可改ef+MySQL.该程序只是源码使用示例,里面有使用方法,自己研究,难度属中上层不建议新手拿YID:5999612973416375......