阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Rancher和DroneCI建立超高速Docker CI/CD流水线

410次阅读
没有评论

共计 4670 个字符,预计需要花费 12 分钟才能阅读完成。

Higher Education(highereducation.com)是一个连接学生与高校的入学申请平台,通过引入高意图和高质量的潜在学生,以及明确、有效的操作,为网站合作的大学吸引学生入学。每年 Higher Education 为其大学合作伙伴招收超过 15000 名在线学生入学申请,有 7500 万高意图的用户通过网站了解大学入学项目。

本文作者为 Higher Education 的架构师 Will Stern,他分享了 Higher Education 使用 Rancher 和 DroneCI 建立超高速 Docker CI/CD 流水线的经验。

正文

在 Higher Education,为了构建我们的 CI/CD 流水线,我们测试使用了不少 CI/CD 工具。Rancher 和 Drone 的使用体验是至今为止我们觉得最简单、速度最快、最愉快的。从代码推送/合并到部署分支的那一刻开始,云托管解决方案中将有约一半的时间在测试、构建和部署上 — 这一过程只需三到五分钟(有些应用程序由于更复杂的构建/测试过程需要更多时间)。

搭建 Drone 环境的配置和维护对我们的开发人员十分友好,在 Rancher 上安装 Drone 就和在 Rancher 上安装其他内容一样,非常简单。

CI/CD 流水线的最大需求点

CI/CD 流水线的好坏实际上是 DevOps 体验的核心,直接影响到我们开发人员。对开发人员来说,CI/CD 流水线最重要的两点就是速度和简易性。

第一点就是速度,毕竟没有什么比推送一行代码需要等待 20 分钟才能投入运行的体验更糟的了。还有糟糕的一点是,当产品出现问题时,由于速度过慢,开发者推出的热修复程序在通过流水线部署时,只会让公司的钱损失的更多。

第二点是简易性,在理想状态下,开发人员可以构建和维护他们的应用部署配置。这让他们更易于使用,毕竟你肯定不会希望开发人员因某些原因搭建失败而不断艾特(Slack)你。

Docker CI/CD 流水线的速度痛点

尽管使用不可变容器远远优于维护有状态的服务器,但它们还是有一些缺陷 — 其中最大的一点就是部署速度:相比于简单地将代码推送至现有服务器上,构建并部署容器镜像的速度更慢。下图显示了 Docker 部署流水线时需要花费时间的地方:

使用 Rancher 和 DroneCI 建立超高速 Docker CI/CD 流水线

Docker 镜像仓库的延迟时间(步骤 1,4,5)可能和构建 Docker 时花费的大量时间有关,这取决于应用程序的大小和搭建所需要的时间。应用程序构建时间(步骤 2,3)可能是固定量,不过也可能受构建过程中可用内存或 CPU 核心的严重影响。

如果你使用的是云托管的 CI 解决方案,那么你就无法控制 CI 服务器运行的位置(镜像仓库的延迟可能非常慢),并且可能无法掌握运行服务器/实例的类型(应用程序构建可能很慢)。另外每个构建过程还将产生大量重复工作,比如每次构建都需要下载基本镜像。

开始 Drone CI

和 Jenkins 工具类似,Drone 需要运行在你的 Rancher 基础设施上。不同的是,Drone 是 Docker 的原生工具——构建过程的每个部分都是一个容器。由于基础镜像可以跨搭建甚至跨项目共享,Drone 运行在你的基础架构上时就能够加快构建的过程。如果你将 Drone 推送到自己的基础架构(如 AWS 的 ECR)上的 Docker 镜像仓库,还可以很大程度上地避免延迟。

Drone 的 Docker 本地化还消除了大量的配置兼容问题,配过 Jenkins 的朋友肯定知道这有多便利。

标准的 Drone 部署过程如下所示:

  • 运行一个容器,通知 Slack 构建已经开始

  • 为“测试”容器配置某个基本镜像,插入代码并在容器中测试运行

  • 运行一个容器,构建和推送生产镜像(到 Docker Hub、AWS ECR 等)

  • 运行一个容器,告诉 Rancher 升级服务

  • 运行一个容器,通知 Slack 构建已经完成/失败

A.drone.yml 文件看起来和 docker-compose.yml 文件非常类似——一个容器列表。因为每个步骤都有专用于该任务的容器,步骤的配置通常非常简单。

启动并运行 Drone

需要的简要操作如下:

  • 注册一个新的 Github OAuth app

  • 在 Rancher 上创建一个 Drone 环境

  • 添加一个“Drone Server”主机和一个或多个“Drone Worker”主机

    • 给 Drone Server 主机添加 drone=server 标签

  • 运行 Drone 栈

实例的大小取决于你——在 Higher Education,我们倾向于使用更少、更强大的 workers,这样可以加快构建的速度。(我们发现一个强大的 worker 能够处理 7 个团队的构建)

一旦你的 drone 服务启动,请运行这个栈:

version: '2'
services:
  drone-server:
    image: drone/drone:0.5
    environment:
      DRONE_GITHUB: 'true'
      DRONE_GITHUB_CLIENT: <github client>
      DRONE_GITHUB_SECRET: <github secret>
      DRONE_OPEN: 'true'
      DRONE_ORGS: myGithubOrg
      DRONE_SECRET: <make up a secret!>
      DRONE_GITHUB_PRIVATE_MODE: 'true'
      DRONE_ADMIN: someuser,someotheruser,
      DRONE_DATABASE_DRIVER: mysql
      DRONE_DATABASE_DATASOURCE: user:password@tcp(databaseurl:3306)/drone?parseTime=true
    volumes:
    - /drone:/var/lib/drone/
    ports:
    80:8000/tcp
    labels:
      io.rancher.scheduler.affinity:host_label: drone=server
  drone-agent:
    image: drone/drone:0.5
    environment:
      DRONE_SECRET: <make up a secret!>
      DRONE_SERVER: ws://drone-server:8000/ws/broker
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    command:
    - agent
    labels:
      io.rancher.scheduler.affinity:host_label_ne: drone=server
      io.rancher.scheduler.global: 'true'

这将在你的 drone=server 主机上运行一个 Drone���务,并为你环境上的其他每一台主机运行一个 drone 代理。我们强烈推荐你使用 MySQL 备份 Drone,设定 DATABASE_DRIVER 和 DATASOURCE 值即可实现。在本例中我们使用了一个小的 RDS 实例。

当栈启动运行后,你可以登录到 Drone 服务的 IP 地址,打开一个仓库用于搭建(从账户菜单)。这里你会注意到 Drone UI 的每一个仓库都没有配置。这一切都需要一个.drone.yml 文件来负责。

添加搭建配置

我们来搭建并测试一个 Node.js 项目,添加一个.drone.yml 文件到你的仓库,就像这样:

pipeline:
  build:
    image: node:6.10.0
    commands:
      - yarn install
      - yarn test

文件的内容非常简洁,你只需在搭建步骤设置放置仓库代码的容器镜像,指定要在该容器中运行的命令即可。

其他的项目也可以由 Drone 插件管理,这些插件相当于针对一个任务的容器。而且因为插件都在 Docker Hub 上,你不需要安装它们,只需将它们添加到.drone.yml 文件中即可。

下面是一个详细使用 Slack、ECR 和 Rancher 插件创建.drone.yml 的例子:

pipeline:
  slack:
    image: plugins/slack
    webhook: <your slack webhook url>
    channel: deployments
    username: drone
    template: "<{{build.link}}|Deployment #{{build.number}} started> on <http://github.com/
{{repo.owner}}/{{repo.name}}/tree/{{build.branch}}|{{repo.name}}:{{build.branch}}> by {{build.author}}"
    when:
      branch: [master, staging]
  build:
    image: <your base image, say node:6.10.0>
    commands:
      - yarn install
      - yarn test
    environment:
      - SOME_ENV_VAR=some-value
  ecr:
    image: plugins/ecr
    access_key: ${AWS_ACCESS_KEY_ID}
    secret_key: ${AWS_SECRET_ACCESS_KEY}
    repo: <your repo name>
    dockerfile: Dockerfile
    storage_path: /drone/docker
  rancher:
    image: peloton/drone-rancher
    url: <your rancher url>
    access_key: ${RANCHER_ACCESS_KEY}
    secret_key: ${RANCHER_SECRET_KEY}
    service: core/platform
    docker_image: <image to pull>
    confirm: true
    timeout: 240
  slack:
    image: plugins/slack
    webhook: <your slack webhook>
    channel: deployments
    username: drone
    when:
      branch: [master, staging]
      status: [success, failure]

尽管上面的代码已经接近 40 行,但它的可读性非常强,而且其中 80% 的代码是拷贝自 Drone 插件文档。(如果你想在云托管的 CI 平台中进行这些操作,可能需要一天时间去阅读文档)需要注意的是,每个插件实际并不需要繁琐的配置。

如果你要使用 Docker Hub 而不是 ECR,使用 Docker 插件即可。

以上就是关于搭建 CI/CD 流水线的介绍。在几分钟内,你可以启动运行具有完整功能的 CD 流水线。另外,使用 Rancher Janitor 目录栈确保你的 workers 的磁盘空间也是一个好主意,你只需知道的是,清理的次数越少,构建的速度就会越快,因为更多的层已经缓存好了。

原文来源:Rancher Labs

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-08/146401.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4670字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7990036
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...