使用Drone搭建CICD服务

简介: Drone是Go语言编写的,基于容器技术的CI/CD系统。它具有以下几个关键特性。 1、Everything is a Docker Container 2、One Server, Multiple Agents 3、Configuration as a code 4、丰富的插件

概要

Drone是Go语言编写的,基于容器技术的CI/CD系统。它具有以下几个关键特性:

Everything is a Docker Container

对Docker原生支持使的: drone无需在构建脚本中额外增加 docker 相关的命令就能:
1. 使用Docker化的集成环境方便的实现对多语言编译
2. 利用集成Docker环境的优势: 环境隔离、标准化镜像
利益于: 对原生 Docker 支持
Any Source Code Manager
Any Platform
Any Language


One Server, Multiple Agents

Server与git平台交互, 提供web服务
Agents具体负责相关的编译、部署等操作
当使用用户多、load高时可以扩展Agents来实现水平扩容
在 1.0 版本之后,只需要一个 drone 服务
  里面面就内建了 server 及 agent,这很适合用非常小团队快速安装 drone

Configuration as a code

使用.drone.yml文件来设定测试及部署流程
Pipelines被配置成你提交到git仓库的简单、易读的文件
Pipeline的每一步骤都自动运行在独立的Docker容器中

丰富的插件:

构建后发送消息: DingTalk, Wechat, Gtalk, Email
构建成功后发布: npm, docker, github release, google container...
构建成功后部署: Kubernetes, rsync, scp, ftp...

调研其他CI/CD系统

需求

  1. 开源软件。可用于商业相关服务的自动化部署
  2. 尽量少一些运维部署操作。我们团队都是开发人员,没有专门的运维,开发人员主要工作是编码而不是其它
  3. 较好的支持k8s微服务。目前使用了比较多服务使用了k8s
  4. 尽量简单,适合小团队使用。服务部署完成后,项目组其他成员可以快速掌握使用
  5. 可以与我们搭建的gitlab私有仓库配合使用

常用的CI/CD系统

CI/CD已经形成了一套标准流程,有多个开源不开源的工具可以实现。常用的CI/CD工具有:

CI系统 是否开源 授权协议 开发语言
Jenkins MIT Java
gitlab-ci MIT Golang
prow Apache-2.0 Golang
Strider MIT JavaScript
Travis 商业软件 Ruby
teamcity 商业软件 Java .NET
Codeship 商业软件 未知

这其中:

1. Travis、Codeship、teamcity使用商用协议
2. Strider不适用k8s环境的自动化部署
3. prow是专用于k8s项目,是Kubernetes测试框架test-infra的一部分,而且目前好像只适用于github平台

只剩下Jenkins和gitlab-ci适合我们目前开发团队的使用

Jenkins

优点:

  功能完善、插件丰富: 有1000多个插件可供选择
  权限控制粒度高: 可以精确控制每个用户的权限
  稳定性高、文档丰富、使用人数多: 出现问题好解决

缺点:

  复杂: 1000多个插件, 不下大功夫, 如何知道应该用哪个插件
  权限控制复杂: 精确控制每个用户的权限, 但需要花大量时间配置
  需要对配置文件单独进行版本控制(实现还比较麻烦)

gitlab-ci

优点:

  执行步骤在没有大的中, 自带版本控制
  与gitlab高度整合

缺点:

  配置复杂
  与gitlab耦合紧密
  开发语言ruby

drone安装

说明

drone支持各git仓库平台, 如github, gitlab, gogs, gitea等。使用不同的仓库平台,安装方式稍有不同。本文以gitlab为例进行说明,其他仓库平台请看文档

在Gitlab上创建OAuth应用

打开Application页面:

右上角头像 -> 设置(setting) -> 应用(Application)
输入框输入下面2个参数:
  1. Application名: 这个可以随便输入为可识别的名字
  2. Redirect URI: 回调地址, 注意这个地址与后面启动服务的地址+/login
如下图所示:

Application页面

创建成功页面如下图所示:

注意需要记住下面两个值:
Application ID和Secret的值, 后面会用到

Application创建成功页面

创建共享密钥

共享密钥用于在Drone Server与各Drone Runner间通信认证时使用, 本篇使用内建的Server, 此值暂时用处不大, 不明白的可以先记住有这么一个事。
可用如下命令生成:

$ openssl rand -hex 16
bea26a2221fd8090ea38720fc445eca6

服务启动

服务启动命令如下:

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GIT_ALWAYS_AUTH=false \
  --env=DRONE_GITLAB_SERVER=http://gitlab.com \
  --env=DRONE_GITLAB_CLIENT_ID=${DRONE_GITLAB_CLIENT_ID} \
  --env=DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITLAB_CLIENT_SECRET} \
  --env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
  --env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \
  --env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \
  --env=DRONE_TLS_AUTOCERT=false \
  --env=DRONE_USER_CREATE=username:zhaoweiguo,admin:true \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1

环境变量参数说明

DRONE_GITLAB_SERVER:

gitlab服务地址

DRONE_GIT_ALWAYS_AUTH:

可选bool型
用于在clone公共项目时认证
此项只有在自托管的Gitlab且启用私有模式时才启用

DRONE_GITLAB_CLIENT_ID:

前面生成Application时得到的Application ID

DRONE_GITLAB_CLIENT_SECRET:

前面生成Application时得到的Secret

DRONE_RPC_SECRET:

Drone Server与各Drone Runner间通信所需要的认证密钥, 即前面使用openssl命令得到的那串32字串

DRONE_SERVER_HOST:

Drone Server服务的启动地址

DRONE_SERVER_PROTO

Drone Server服务的协议

DRONE_TLS_AUTOCERT:

Drone服务默认

DRONE_USER_CREATE:

设置 Drone 的管理员,格式为:username:<username>,admin:true
本实例中:
  <username> 的值 zhaoweiguo 就是我在gitlab上的用户名
  admin: 指定此用户名的用户为管理员用户

说明

docker run启动成功后, 一个单节点的Drone就算是部署完成...

参考

轻量快速的 CI 工具 Drone
官网

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Cloud Native 关系型数据库 程序员
使用Docker部署自动化CI/CD平台Drone
[Drone](https://drone.io) 是一个现代化的持续集成平台,能够使用强大的云原生管道引擎自动化他们的构建、测试和发布工作流程,让我们不再关注程序如何发布而是如何去实现,去更好的实现。
使用Docker部署自动化CI/CD平台Drone
|
8月前
|
人工智能 Linux API
新手零门槛搭建OpenClaw龙虾智能体:阿里云本地/一键/手动部署+免费模型API配置智能
2026年,OpenClaw(Clawdbot)作为开源可自托管的AI执行框架,已经成为普通用户搭建自动化数字助理的主流方案。它能够实现文件处理、文档解析、网页检索、任务自动化、多智能体协同等能力,并且支持私有化部署,数据与交互记录完全保留在自有设备或服务器中,满足隐私与安全需求。
1086 1
|
9月前
|
数据安全/隐私保护 iOS开发
Mac mini 带回老家,打算用远程控制,第一次开机我傻眼了
Mac mini回老家远程办公?别急!首次开机需本地输密码+连Wi-Fi,无屏幕/键盘/Type-C转接头极易卡死。iPad最省心,电视临时救急,旧笔记本远程前必先“本地破冰”。提前备齐外设,否则真会傻眼!
869 4
|
10月前
|
存储 弹性计算 安全
研发数据不出域,安全合规再升级!云效 Region 版发布
云效 Region 版本正式发布,打造企业级研发平台。
|
12月前
|
Linux 网络安全 数据安全/隐私保护
【全网最全最详细】Linux下私服Nexus安装教程
本文介绍Nexus私服的安装与配置步骤:下载解压包、创建专用用户、禁止root启动、配置权限、启动服务并开放防火墙端口,最后通过浏览器访问管理界面并获取初始密码完成初始化设置。
683 0
|
Web App开发 前端开发
前端下载文件(Blob)的几种方式使用Blob下载文件
前端下载文件(Blob)的几种方式使用Blob下载文件
1806 0
|
Kubernetes jenkins 持续交付
轻量快速的 CI 工具 Drone
本文介绍一款轻量级的 CI 工具 Drone ,同时也介绍在实践中遇到的一些坑,帮助你快速搭建持续集成流水线。
8188 0
|
Kubernetes JavaScript 前端开发
k8s学习--chart包开发(创建chart包)
k8s学习--chart包开发(创建chart包)
1045 1
|
存储 人工智能 自然语言处理
利用AI技术实现智能客服系统
【8月更文挑战第27天】本文将介绍如何利用人工智能(AI)技术构建一个智能客服系统,以提高客户服务效率和质量。我们将从需求分析、系统设计、功能实现等方面进行详细阐述,并通过实际代码示例展示如何实现一个简单的智能客服系统。
1426 6