使用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
|
网络协议 Windows
网络连接正常但百度网页打不开显示无法访问此网站解决方案
网络连接正常但百度网页打不开显示无法访问此网站解决方案
4884 0
网络连接正常但百度网页打不开显示无法访问此网站解决方案
|
4月前
|
人工智能 Linux API
新手零门槛搭建OpenClaw龙虾智能体:阿里云本地/一键/手动部署+免费模型API配置智能
2026年,OpenClaw(Clawdbot)作为开源可自托管的AI执行框架,已经成为普通用户搭建自动化数字助理的主流方案。它能够实现文件处理、文档解析、网页检索、任务自动化、多智能体协同等能力,并且支持私有化部署,数据与交互记录完全保留在自有设备或服务器中,满足隐私与安全需求。
915 1
|
人工智能 前端开发 程序员
平替cursor吗?通义灵码创造AI导航网站
作为一名古老语言COBOL程序员,我习惯了面向过程的编程方式。近期尝试用通义灵码创建了一个AI导航网站,并发布在微信公众号上。由于前端知识有限,网站的CSS特效是逐步生成的。尽管之前使用过cursor、cline+deepseek等工具,但这次通义灵码的帮助让我更顺利地完成了项目。网站展示了收集的资料和资源,效果令人满意。 [查看网站](https://mp.weixin.qq.com/s/LsrAgdq6-0rnednxDjrqUw)
|
Ubuntu Linux Docker
Ubuntu 18.04 安装Docker实战案例
关于如何在Ubuntu 18.04系统上安装Docker的实战案例,包括安装步骤、配置镜像加速以及下载和运行Docker镜像的过程。
2525 3
Ubuntu 18.04 安装Docker实战案例
|
JSON 自然语言处理 前端开发
React国际化中英文切换实现
React国际化中英文切换实现
|
计算机视觉 Python
Opencv学习笔记(十):opencv和base64之间的转换
本文介绍了如何使用Python和OpenCV库将图像在Base64编码和OpenCV可读格式之间进行转换。
788 0
|
存储 Ubuntu jenkins
CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse
CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse
1903 0
|
存储 消息中间件 监控
容器日志采集利器Log-Pilot
容器时代越来越多的传统应用将会逐渐容器化,而日志又是应用的一个关键环节,那么在应用容器化过程中,如何方便快捷高效地来自动发现和采集应用的日志,如何与日志存储系统协同来高效存储和搜索应用日志,本文将主要跟大家分享下如何通过Log-Pilot来采集容器的标准输出日志和容器内文件日志。
23965 0
|
Kubernetes jenkins 持续交付
轻量快速的 CI 工具 Drone
本文介绍一款轻量级的 CI 工具 Drone ,同时也介绍在实践中遇到的一些坑,帮助你快速搭建持续集成流水线。
8039 0

热门文章

最新文章