返回顶部
首页 > 资讯 > 精选 >怎么快速入门轻量快速的CI工具Drone
  • 401
分享到

怎么快速入门轻量快速的CI工具Drone

2023-06-19 10:06:11 401人浏览 独家记忆
摘要

怎么快速入门轻量快速的CI工具Drone,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言公司之前一直在使用 jenkins 作为 CI/CD 工具, Jenkins 非常强大

怎么快速入门轻量快速的CI工具Drone,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

前言

公司之前一直在使用 jenkins 作为 CI/CD 工具, Jenkins 非常强大,它完成了几乎所有 CI/CD 的工作,并且应用于整个团队有好长一段时间了。但是随着公司推荐数字化、智慧化,以及服务容器化的推进, Jenkins 的一些弊端也凸显了出来:

  • 重量级: Jenkins 功能十分齐全,几乎可以做所有的事情。但是这也是他的一个弊端,过于重量级,有时候往往一个小的修改需要改动许多地方,升级\下载插件后需要进行重启等。

  • 升级不易: 在一些安全 Jenkins 相关的安全漏洞被公开后,我们会对 Jenkins 进行升级,但这也不是一件容易的事。之前就出现过升级\重启后,所有 job 丢失,虽然我们所有项目配置都是以 Jenkinsfile 的形式统一存储,但是每个 job 都需要重新重新创建,包括每个 job 的权限....._(´ཀ`」 ∠)_

  • 权限控制复杂: 这其实也是 Jenkins 的一大优势,可以精确控制每个用户的权限,但是需要花费更多时间去配置,时间长了也会出现权限混乱的问题。

  • UI 界面: 这个其实是吐槽最多的部分,虽然有诸如:Blue Ocean 这样的插件来展示 pipeline ,但是还是没有从根本改变它简陋的 UI 界面。

那么为什么选择使用 Drone 呢?

其实在 GitHub 上提交 PR 后,大部分开源项目都会使用 travis-ci 对提交的代码进行 CI 及检查,而如果是 kubernetes 相关的项目,则会使用 prow 进行 CI。但是 travis-ci 只能用于 gitHub ,在寻找类似项目的时候, Drone 进入了我的视野。

大道至简。和 Jenkins 相比, Drone 就轻量的多了,从应用本身的安装部署到流水线的构建都简洁的多。由于是和源码管理系统相集成,所以 Drone 天生就省去了各种账户\权限的配置,直接与 gitlab 、 github 、 Bitbucket 这样的源码管理系统操作源代码的权限一致。正如它官网上写的那样:

Any Source Code Manager

Drone integrates seamlessly with multiple source code management systems, including GitHub, GitHubEnterprise, Bitbucket, and GitLab.

Any Platform

Drone natively supports multiple operating systems and architectures, including linux x64, ARM, ARM64 and windows x64.

Any Language

Drone works with any language, database or service that runs inside a Docker container. Choose from thousands of public Docker images or provide your own.

Drone 天生支持任何源码管理工具、任何平台和任何语言。

而写这篇文章的目的,并不是要吹捧这个工具有多么的好用,而是要总结在搭建 drone 和使用时候需要的各种坑,帮助读者绕过这些坑。

声明

鉴于在使用 Drone CI 中,遇到的各种坑都和 Drone 的版本有关,这里首先声明我使用的 Drone 版本为1.1,使用0.8版本的同学请绕道。

搭建 Drone

这里要说的就是在使用 drone 中遇到的第一个坑,在最初正准备搭建 drone 的时候 Google 了很多相关的 blog ,大部分 blog (包括某些 medium.com 上面近期的英文 blog) 推荐的安装方式都是使用 docker-compose,而无一例外的都失败了...走投无路之下,我回到了官网的文档,发现1.0之后许多参数都发生了变化,并且官方推荐使用 docker 的方式运行 Drone。

所以在使用任何开源软件之前都要去阅读它的文档,不要跟着一篇 blog 就开始了(包括我的),这样会少踩很多坑!!!

这里以 gitlab 为例,展示网上版本启动参数和实际参数的不同:

作用各种blog官网文档
设置 Drone 的管理员DRONE_ADMIN=adminDRONE_USER_CREATE=username:admin,admin:true
设置GitLab的域名DRONE_GITLAB_URLDRONE_SERVER_HOST
GitLab的Application中的keyDRONE_GITLAB_CLIENTDRONE_GITLAB_CLIENT_ID
GitLab的Application中的secretDRONE_GITLAB_SECRETDRONE_GITLAB_CLIENT_SECRET
Drone 域名DRONE_HOSTDRONE_GITLAB_SERVER

上面只是列举了部分官方文档和网上流产版本的不同,所以在使用之前一定要仔细阅读官方文档。下附运行 drone 的命令:

docker run \  --volume=/var/run/docker.sock:/var/run/docker.sock \  --volume=/var/lib/drone:/data \  --env=DRONE_GIT_ALWAYS_AUTH=false \  --env=DRONE_GITLAB_SERVER={your-gitlab-url} \  # gitlab 的 URL  --env=DRONE_GITLAB_CLIENT_ID={your-gitlab-applications-id} \  #GitLab的Application中的id  --env=DRONE_GITLAB_CLIENT_SECRET={your-gitlab-applicati-secret} \ #GitLab的Application中的secret  --env=DRONE_SERVER_HOST={your-drone-url} \    # drone 的URl  --env=DRONE_SERVER_PROTO=Http \  --env=DRONE_TLS_AUTOCERT=false \  --env=DRONE_USER_CREATE=username:{your-admin-username},admin:true \   # Drone的管理员  --publish=8000:80 \  --publish=443:443 \  --restart=always \  --detach=true \  --name=drone \  drone/drone:1.1

关于 gitlab Application 的配置和 Drone 其他参数含义请参考官方文档,这里只展示单节点办的运行方式。

核心文件 .drone.yml

要使用 Drone 只需在项目根创建一个 .drone.yml 文件即可,这个是 Drone 构建脚本的配置文件,它随项目一块进行版本管理,开发者不需要额外再去维护一个配置脚本。其实现代 CI 程序都是这么做了,这个主要是相对于 Jekins 来说的。虽然 Jekins 也有插件支持,但毕竟还是需要配置。

值得注意的事这个文件时 .drone.yml,由于 Kubernetes 使用的多了,第一次创建了一个 .drone.yaml 文件,导致怎么都获取不到配置..._(´ཀ`」 ∠)_... YAML 工程师石锤了...

这里放一个 Java 的 .drone.yml ,这个项目是 fork 别人的项目用作演示,记得要修改 deployment.yaml 中的镜像仓库地址修改为自己的私有仓库。

示例项目源码:https://github.com/sunny0826/pipeline-example-Maven

kind: pipelinename: pipeline-example-mavensteps:- name: Maven编译  image: maven:3-jdk-7  volumes:  - name: cache    path: /root/.m2  commands:    - mvn clean install- name: 构建镜像    image: plugins/docker  volumes:  - name: docker    path: /var/run/docker.sock  settings:    username:       from_secret: docker_user    passWord:       from_secret: docker_pass    repo: {your-repo}    reGIStry: {your-registry}    tags: ${DRONE_BUILD_NUMBER}- name: Kubernetes 部署  image: guoxudongdocker/kubectl:v1.14.1   volumes:  - name: kube    path: /root/.kube  commands:    - sed -i "s/#Tag/${DRONE_BUILD_NUMBER}/g" deployment.yaml    - kubectl apply -f deployment.yaml- name: 钉钉通知  image: guoxudongdocker/drone-dingtalk   settings:    token:       from_secret: dingding    type: markdown    message_color: true    message_pic: true    sha_link: true  when:    status: [failure, success]volumes:- name: cache  host:    path: /tmp/cache/.m2- name: kube  host:    path: /tmp/cache/.kube/.test_kube- name: docker  host:    path: /var/run/docker.socktrigger:  branch:  - master

值得注意的事:上面的这个 .drone.yml 文件将本地的.m2文件、kubeconfig文件、docker.sock 文件挂载到 pipeline 中以实现 maven 打包缓存k8s 部署、docker 缓存的作用,以提高 CI 速度。而是用挂载需要管理员在项目 settings 中勾选 Trusted ,这个操作只能管理员进行,普通用户是看不到这个选项的。而管理员就是在docker运行时候 --env=DRONE_USER_CREATE=username:{your-admin-username},admin:true 设置的。

怎么快速入门轻量快速的CI工具Drone

而上传镜像和钉钉同时需要在 settings 设置中添加 secret

  • docker_user:docker 仓库用户名

  • docker_pass:docker 仓库密码

  • dingding: 钉钉机器人 token

注意这里的钉钉 token 是 WEBhook 中 https://oapi.dingtalk.com/robot/send?access_token= 后这部分 怎么快速入门轻量快速的CI工具Drone

怎么快速入门轻量快速的CI工具Drone

构建结果

添加 .drone.yml 文件后,向 master 分支提交代码即可出发 CI 构建

怎么快速入门轻量快速的CI工具Drone CI 结束后,会在钉钉机器人所在群收到通知

怎么快速入门轻量快速的CI工具Drone

插件支持

可以看到,每一步的镜像都是一个镜像,上面 pipeline 中的 Kubernetes 及钉钉通知插件就是我开发的,具体开发方法可以参考官方文档,而官方也提供了许多官方插件。

  • 构建后部署:Kubernetes、helm、scp

  • 构建后通知:钉钉 、Email、Slack、微信

Drone 整体用起来还是很方便的,搭建、上手速度都很快,但是官方文档给的不够详实,而网上充斥着各种各样0.8版本的的实例,但是其实官网早就发布了1.0版本,而官方并没有 example 这样的示例项目,这样就又把本来降下来的学习曲线拉高了。许多坑都需要自己去趟,我在测试 drone 的时候,就构构建了上百次,不停的修改 .drone.yml , commit 信息看起来是很恐怖的。后续抽空会向官方贡献 example 这样的 PR。

看完上述内容,你们掌握怎么快速入门轻量快速的CI工具Drone的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么快速入门轻量快速的CI工具Drone

本文链接: https://www.lsjlt.com/news/295259.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么快速入门轻量快速的CI工具Drone
    怎么快速入门轻量快速的CI工具Drone,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言公司之前一直在使用 Jenkins 作为 CI/CD 工具, Jenkins 非常强大...
    99+
    2023-06-19
  • GNU开发工具——GDB快速入门
    GNU开发工具——GDB快速入门 一、GDB简介 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB能够跟踪程序的执行,也能够恢复程序崩溃前的状态。GDB常规功能如下:A、自定...
    99+
    2019-06-22
    GNU开发工具——GDB快速入门 数据库入门 数据库基础教程 数据库 mysql
  • python开发工具pycharm快速入门
    本教程是关于什么的本教程旨在引导您完成创建,运行和调试一个简单的Python项目,使用PyCharm一步一步 - Python的IDE有一整套完整的生产性的开发工具。本教程不是关于哪些的Python编程超出了本教程的范围。要了解更多关于Py...
    99+
    2023-06-02
  • 怎么快速入门Mycat
    这篇文章给大家介绍怎么快速入门Mycat ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是Mycat至于什么是Mycat,可能在不同的角色下有不同的理解。对MySQL架构有过了解的...
    99+
    2024-04-02
  • 怎么快速入门JavaScript
    这篇文章主要讲解了“怎么快速入门JavaScript”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么快速入门JavaScript”吧!arrayGcdCa...
    99+
    2024-04-02
  • Nginx怎么快速入门
    本文小编为大家详细介绍“Nginx怎么快速入门”,内容详细,步骤清晰,细节处理妥当,希望这篇“Nginx怎么快速入门”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Nginx 是一款面向性能设计的 HTTP 服务器...
    99+
    2023-06-28
  • 【Android】蓝牙快速开发工具包-入门级
    开头语 方便快速开发蓝牙,封装常用的操作。 需要以下三个权限: android.permission.BLUETOOTH android.per...
    99+
    2022-06-06
    工具 开发工具 Android 蓝牙
  • TypeScript内置工具类型快速入门运用
    目录前言一、什么是ts内置工具类型二、使用示例1.Partial2.Required3.ReadOnly4.Pick5.Record总结前言 TS为了方便开发者使用,在内部提供了非常...
    99+
    2023-03-09
    TypeScript内置工具 TypeScript工具类型
  • python开发工具pycharm快速入
    本教程是关于什么的本教程旨在引导您完成创建,运行和调试一个简单的Python项目,使用PyCharm一步一步 - Python的IDE有一整套完整的生产性的开发工具。本教程不是关于哪些的Python编程超出了本教程的范围。要了解更多关于Py...
    99+
    2023-01-31
    开发工具 快速 python
  • 怎么快速入门Java编程
    本篇内容主要讲解“怎么快速入门Java编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么快速入门Java编程”吧!  自学Java编程的好处是时间自由、经济消耗低,但存在的主要问题是你无法确...
    99+
    2023-06-02
  • 现代高效的java构建工具gradle的快速入门
      和Maven一样,Gradle只是提供了构建项目的一个框架,真正起作用的是Plugin。Gradle在默认情况下为我们提供了许多常用的Plugin,其中包括有构建Java项目的P...
    99+
    2024-04-02
  • flyway的快速入门教程
    目录 一、简单介绍 二、为什么要使用flyway 三、flyway是如何工作的 四、如何使用flyway 1、先要初始化一个SpringBoot项目,引入依赖 2、在application.yml中添加相关配置 3、根据配置文件中填写的脚本...
    99+
    2023-09-27
    spring boot flyway database mysql
  • 零基础怎么快速入门Python
    这篇文章主要讲解了“零基础怎么快速入门Python”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“零基础怎么快速入门Python”吧!1、Python 介绍学习一门新的语言之前,首先简单了解下...
    99+
    2023-06-02
  • VectorMap.js 矢量化地图库 – 快速入门
    VectorMap.js是一个开源地图渲染JavaScript库, 可以使用WebGL或者HTML5两种方式进行交互式矢量地图 (包括“矢量瓦片地图”,一般性矢量数据地图)和 栅格瓦片地图的渲染。 WebGL渲染意味着高性能,大数据, HT...
    99+
    2023-06-03
  • Python语言怎样快速入门
    本篇文章给大家分享的是有关Python语言怎样快速入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。【简介】Python是一种动态解释型的编程语言。Python可以在Windo...
    99+
    2023-06-17
  • 快速入门:Python人工智能库一览
    快速入门: Python人工智能库一览,需要具体代码示例引言:随着人工智能技术的快速发展,应用于机器学习和深度学习的Python人工智能库也越来越多。这些库提供了各种强大的工具和算法,使得开发者们能够更加轻松地构建和训练自己的人工智能模型。...
    99+
    2023-12-23
    Python 人工智能库 入门
  • Gradio快速部署工具怎么应用
    这篇文章主要介绍“Gradio快速部署工具怎么应用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Gradio快速部署工具怎么应用”文章能帮助大家解决问题。1.分享演示share=True通过在方法中...
    99+
    2023-07-05
  • 怎么使用Win8快速入门指导
           Win8客户预览发布啦,全新的操作会不会令你无所适从?如何快速入门玩转Win   Win8装好以后面对全新的Metro界面如何操作?没有触摸屏,只...
    99+
    2023-06-03
    Win8
  • Python快速入门的方法是什么
    这篇文章主要介绍“Python快速入门的方法是什么”,在日常操作中,相信很多人在Python快速入门的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python快速入门的方法是什么”的疑惑有所帮助!...
    99+
    2023-06-17
  • php快速入门的方法是什么
    要快速入门PHP,可以按照以下步骤进行:1. 下载和安装PHP:首先,需要下载并安装PHP的最新版本。可以从PHP官方网站(http...
    99+
    2023-08-30
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作