松鼠乐园 松鼠乐园
  • 注册
  • 登录
  • 首页
  • 快捷入口
    • Vue
    • Tensorflow
    • Springboot
    • 语言类
      • CSS
      • ES5
      • ES6
      • Go
      • Java
      • Javascript
    • 工具类
      • Git
      • 工具推荐
    • 服务器&运维
      • Centos
      • Docker
      • Linux
      • Mac
      • MySQL
      • Nginx
      • Redis
      • Windows
    • 资源类
      • 论文
      • 书籍推荐
      • 后端资源
      • 前端资源
      • html网页模板
      • 代码
    • 性能优化
    • 测试
  • 重大新闻
  • 人工智能
  • 开源项目
  • Vue2.0从零开始
  • 广场
首页 › Docker › Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

迦娜王
1年前Docker
364 0 0

一、介绍

Drone是一个用GO语言编写的基于Docker的持续集成、持续交付平台,所有的编译、测试的流程都在Docker容器中执行。Drone使用简单的YAML配置文件来定义和执行Docker容器中的Pipelines,开发人员只需要在项目中包含.drone.yml文件,将代码推送到Git版本控制仓库中,Drone就能够自动化的进行编译、测试和发布。

Drone可以无缝集成多个源码管理的平台,包括Github、GitLab、Bitbucket、Gitea、Gogs等,如果企业是基于上面几个搭建的源码管理平台,可以和Drone无缝集成。Drone原生就是跨平台的,支持多种操作系统和架构,包括Linux x64、ARM、ARM64和Windows x64。Drone是在Docker容器里执行流水线,所以Drone支持任意编程语言、数据库和服务。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

二、特性

1、配置文件即代码

Drone中定义Pipeline(流水线)都是通过命名为.drone.yml的配置文件来定义的。这个配置文件是以简单、易读的YAML格式编写,如下图所示。这个.drone.yml文件需要和代码一起提交到Git版本控制仓库中,纳入版本管理,方便变更记录的跟踪和回溯。每条流水线的执行都是在一个独立的Docker容器中执行,在执行时自动下载需要的组件。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

2、插件体系

Drone是通过插件体系兼容多方平台和提供强大的功能。Drone在执行时,使用容器将预先配置好的步骤加入到Pipeline中,然后从现有的插件体系中选择需要的插件,或者可以创建自己的插件。这里需要提到的是已经和钉钉、微信等通信工具集成。

在Drone里使用插件不会像Jenkins里那样,Jenkins是在自己的平台里管理自己的插件,插件和流水线构建是集成在一起的,每次进去都会看到升级的提示。但在Drone里,插件管理和流水线是分开的,在Pipeline里声明一下,只要有网络连接能访问到就可以,究竟插件是如何管理,如何升级的都可以不用管。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

3、独立的构建环境

因为每次构建都运行在独立的Docker容器里,不用担心由于构建环境共用导致的问题。同时,也解决了企业内部多种开发语言,构建工具版本的不同的问题,准备一个镜像就可以解决。基于Docker的构建环境的创建同样也能够加入到Git版本控制仓库,也能对构建环境的版本进行管理和追溯。

4、构建环境的自动扩缩容

首先,基于Docker容器的构建环境本身就具有自动扩缩容的能力。每次都是通过构建一下新的容器环境来执行流水线任务,只要资源足够,可以支持无限制的构建任务。

Drone提供了一个Autoscaler的组件,是一个独立运行的后台进程,需要安装在宿主机上,而且不同的云平台安装方式也不一样。这个组件能够根据构建任务的数量自动创建和终止服务器的实例,从而实现构建环境的自动扩缩容的目标。

三、安装

Drone的安装包含Server端和一个或多个Runners。一个runner是一个安装在远端服务器上的独立的后台进程,它通过轮询服务器上的负载决定是否执行,将runner安装在许多个服务器上来创建分布式的网络。

1、Server端

上面提到,Drone可以无缝集成多种源码管理平台,在进行Server端安装时,需要与源码管理平台进行集成,这里以GitHub为例进行说明:

第一步:准备工作

创建一个OAuth应用程序,在Github设置里创建一个OAuth应用程序,Key和Secret用于授权访问Github上的资源。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone
Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

创建一个共享的Secret,这个Secret用于Server和Runner之间的通信,可以使用openssl生成一个共享的Secret。

$ openssl rand -hex 16 bea26a2221fd8090ea38720fc445eca6

第二步,下载Drone镜像

Drone是以一个轻量级的Docker镜像分发的,这个镜像是自包含的,不需要任何其他的外部依赖。

$ docker pull drone/drone:1

第三步,配置Server

Drone Server采用环境变量的方式进行配置。这里需要设置的变量有:

DRONE_GITHUB_CLIENT_ID:github oauth Client ID

DRONE_GITHUB_CLIENT_SECRET:github oauth Client Secret

DRONE_GIT_ALWAYS_AUTH:clone时是否每次都需要授权,只在Github Enterprise私有模式下生效

DRONE_RPC_SECRET:通过RPC连接到server的授权Secret

DRONE_SERVER_HOST:提供外部主机名或IP地址

DRONE_SERVER_PROTO:http或https协议,当使用ssl或acme配置时默认是https。

第四步,启动服务器

通过如下的命令启动服务端容器,配置需要的参数通过环境变量,这是使用docker run方式启动。

docker run \
 --volume=/var/lib/drone:/data \
 --env=DRONE_AGENTS_ENABLED=true \
 --env=DRONE_GITHUB_SERVER=https://github.com \
 --env=DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID} \
 --env=DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET} \
 --env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
 --env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \
 --env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \
 --publish=80:80 \
 --publish=443:443 \
 --restart=always \
 --detach=true \
 --name=drone \
 drone/drone:1

基于Github的Server就启动了,其他的源码控制管理平台的安装也是一样。

2、Runner安装

一旦Server端安装完毕后,就需要安装Runner来执行Pipelines。Drone支持多种形式的Runner,下面单独介绍:

Docker Runner:当在Docker容器里执行构建流水线时安装此Runner。

Kubernetes Runner:当Drone运行在Kubernetes上时,该Runner在Pods里执行构建流水线。

Exec Runner:当直接在宿主机上执行构建流水线时安装此Runner,通常都是采用shell脚本。

SSH Runner:当需要在远程服务器上执行构建流水线时,通过SSH协议直接调用执行。

Digital Ocean Runner:这个Runner使用SSH协议在一台专用的Droplet上执行,这个Droplet在每个流水线执行时创建,完成后销毁。

四、配置

一个项目以配置即代码的方式存储配置文件,在项目的根目录下添加一个.drone.yml文件,这个文件和代码库一起加入版本控制,并遵循相同的分支结构。每次推送代码、创建或更新一个Pull Request、或者推送一个Tag时,系统将获取这个yaml配置文件并执行这个Pipeline。主要配置以下几个资源:

1、Pipeline

一个Pipeline为这个项目定义了一个持续集成和持续交付的过程,可以认为是一个工作流,定义了如何构建、测试和部署等步骤。pipeline配置样例:

---
kind: pipeline
type: docker
name: default

steps:
- name: build
 image: golang
 commands:
 - go build
 - go test

....

Drone支持不同类型的执行环境,每种类型的环境都有自定义的yaml规范。kind和type属性定义了pipeline的类型和目标执行环境。根据上面Runner类型的不同,这里的yaml文件的配置也是不一样的,通过type这个字段进行区分,每种类型的Runner支持的Yaml文件的规范也是不一样的,特殊类型要特殊对待。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

2、Secrets

Secret用户存储和管理敏感信息,有下面几种级别的设置。

代码库级别:

代码库的Secrets用于存储和管理敏感信息,如密码、令牌和ssh密钥。将此信息存储在Secrets中比纯文本的配置文件更加安全。

组织级别:

组织级别的Secrets可以用于这个组织下的任意代码库。

加密Secrets:

加密Secrets用于存储敏感信息,如密码、令牌和ssh密钥,将此信息作为加密的字符串存储在配置文件中。可以使用命令行工具加密Secrets,每个代码库都单独加密,这个Key从不离开服务器环境。

External

外部的Secrets用于从外部的Secrets存储里获取敏感信息,如密码、令牌和ssh密钥。

3、Signature签名

可以选择对配置文件进行签名,以验证其真实性并防止篡改。这个签名在代码库是公共的,并且需要防止对配置进行未经授权的更改时会很有用。如果用户修改配置并且签名验证失败,流水线将被阻止,需等待对代码库具有写权限或管理权限的用户手动批准。

4、Cron定时调度

可以使用Cron jobs来执行基于时间的调度,可以在代码库的Settings界面上创建和管理cron job或使用命令行工具。

表达式

cron表达式代表了任务执行的时间集合,包含6个字段,各字段说明如下:

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

Drone内部已经定义了一些调度的cron表达式,如@yearly、@monthly、@weekly、@daily、@hourly。

五、试用

在Drone Cloud平台上,可以与Github集成,构建Github上的代码仓库,这里我选择了一个SpringBootTest的代码库,使用Github的页面编辑新增.drone.yml文件,如下:

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

提交之后就会触发Drone流水线构建

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

点击进入到流水线详情页面。第一步是clone代码库阶段,clone不需要在yml文件内声明。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

第二步是test阶段,这一步是.drone.yml文件中声明的,通过日志可以看出,该步骤是先拉取了gradle:jdk8的镜像,然后在该容器内部执行的流水线步骤。

Jenkins是否还要继续用?介绍一款基于容器的CICD平台Drone

六、总结

如今,越来越多的企业开始重视软件研发的效率和质量,也有越来越多的企业开始采用DevOps理念来提升效率和质量。在整个软件研发全生命周期中,CICD是非常重要并且提升效率最为明显的阶段。通过实现自动化,能够大幅缩短从开发到测试到部署的时间。

随着Docker、Kubernetes等容器技术的成熟,特别是一线互联网公司已经将自己的业务部署在云端。在不远的未来,云计算必将成为软件系统运行的基础设施环境,就像如今的水和电一样想用就用。云计算的普遍使用,也催生了云原生技术的发展,同时也催生了云原生下的CICD平台的崛起,Drone就是其中一员。

Jenkins在一段时期内是CICD的代名词,界面化的操作和配置根本无法谈增效,Jenkins 2.0后,通过配置即代码的最佳实践,将流水线的构建过程配置到jenkinsfile里,提交到代码仓库下也纳入到了版本控制下,但真正用起来的并不多见。Jenkins X是下一代基于云原生的CICD框架,以Docker和Kubernetes容器生态为基础组件,通过命令行的方式实现CICD的所有功能。

JenkinsX和Drone都属于云原生下的CICD框架,都能充分利用容器的天然优势,提高CICD的灵活性和效率,JenkinsX目前仍在开发中,Drone目前来看已经在多个案例使用。如果打算构建容器环境的CICD平台,Drone可以是个不错的选择。

docker Drone jenkins
0
别在 Java 代码里乱打日志了,这才是打印日志的正确姿势
上一篇
为什么你的设计这么烂?-科学UI设计流程改进作品
下一篇
评论 (0)

请登录以参与评论。

现在登录
聚合文章
在Gitee收获近 5k Star,更新后的Vue版RuoYi有哪些新变化?
2月前
vue3.x reactive、effect、computed、watch依赖关系及实现原理
2月前
Vue 3 新特性:在 Composition API 中使用 CSS Modules
2月前
新手必看的前端项目去中心化和模块化思想
2月前
标签
AI AI项目 css docker Drone Elaticsearch es5 es6 Geometry Go gru java Javascript jenkins lstm mysql mysql优化 mysql地理位置索引 mysql索引 mysql规范 mysql设计 mysql配置文件 mysql面试题 mysql高可用 nginx Redis redis性能 rnn SpringBoot Tensorflow tensorflow2.0 UI设计 vue vue3.0 vue原理 whistle ZooKeeper 开源项目 抓包工具 日志输出 机器学习 深度学习 神经网络 论文 面试题
相关文章
以卡通的方式了解Kubernetes
Docker 常用命令
松鼠乐园

资源整合,创造价值

小伙伴
墨魇博客 无同创意
目录
重大新闻 Centos CSS Docker ES5 ES6 Go Java Javascript Linux Mac MySQL Nginx Redis Springboot Tensorflow Vue Vue2.x从零开始 Windows 书籍推荐 人工智能 前端资源 后端资源 壁纸 开源项目 测试 论文
Copyright © 2018-2021 松鼠乐园. Designed by nicetheme. 浙ICP备15039601号-4
  • 重大新闻
  • Centos
  • CSS
  • Docker
  • ES5
  • ES6
  • Go
  • Java
  • Javascript
  • Linux
  • Mac
  • MySQL
  • Nginx
  • Redis
  • Springboot
  • Tensorflow
  • Vue
  • Vue2.x从零开始
  • Windows
  • 书籍推荐
  • 人工智能
  • 前端资源
  • 后端资源
  • 壁纸
  • 开源项目
  • 测试
  • 论文
热门搜索
  • jetson nano
  • vue
  • java
  • mysql
  • 人工智能
  • 人脸识别
迦娜王
坚持才有希望
1224 文章
33 评论
233 喜欢
  • 0
  • 0
  • Top