自动化部署之旅 - 当我放弃了Jenkins而选择了Drone CI

简介: 一直以来对于项目的部署管理我都是采用Jenkins,但其实我使用到的也只是它接收webhook的功能,然后触发对应的项目预设shell脚本来运行部署,最近突然心血来潮,想尝试下不同的集成构建方案,在简单调研后选择了Drone,其轻量、高颜值的特点立刻吸引了我。

一直以来对于项目的部署管理我都是采用Jenkins,但其实我使用到的也只是它接收webhook的功能,然后触发对应的项目预设shell脚本来运行部署,这就显得有些杀鸡用牛刀(实际大部分公司的部署流程应该也差不多),就在最近突然心血来潮,想尝试下不同的集成构建方案,在简单调研后选择了Drone,其轻量、高颜值的特点立刻吸引了我,话不多说马上开搞,嗳~ 就是玩~

我目前的构建方案是:Github + Drone + Docker ( docker安装 )

先来看看修改前后服务器内存占用对比

使用Jenkins时:

image.png

这是停掉Jenkins,启用Drone时:

image.png

可以看到内存占用直接下降了一半,感觉轻量到可以飞起来~

体积上更是两个维度:

image.png

如果要说Drone有什么缺点的话,就是官方文档过于简单吧,有什么问题也比较难找到文章,导致折腾了不少时间。

0. 配置Github

这是使用Github作为代码托管的前置工作,首先登陆你的github账户,在右上角点击个人头像,选择Setting,选择Developer settings,选择OAuth Application,选择新建一个application:

image.png
image.png

创建成功以后,拿到Client IDClient Secret,拿小本本记下来。

  1. 这里需要注意的是 callback URL 需要填写你的Drone的登录地址,具体为drone主页链接后面加上/login

1. 安装Drone

使用docker安装drone,drone需要创建两个容器,一个提供视图界面的webService端,另一个是执行任务的runner端,这里先安装web端。

注:运行时去掉#号后面的说明

docker run \
  --volume=/var/drone:/data \ # 备注:1
  --env=DRONE_GITHUB_CLIENT_ID= \ # 备注:2
  --env=DRONE_GITHUB_CLIENT_SECRET= \ # 备注:2
  --env=DRONE_RPC_SECRET= \ # 备注:2
  --env=DRONE_SERVER_HOST= xxx.com \ #备注:3
  --env=DRONE_SERVER_PROTO=http \ #备注:4
  --env=DRONE_USER_CREATE=username:name,admin:true \ #备注:5
  --publish=10086:80 \ #备注:6
  --publish=10087:443 \ #备注:6
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:latest
  1. drone与宿主机的目录映射,其中可将/var/drone换成你宿主机自定义的目录
  2. 填写上一步的Client IDClient Secret,RPC_SECRET和下面runner保持一致就行,为了方便我们可以直接填Client Secret,你也可以在任意终端运行openssl rand -hex 16自己生成秘钥。
  3. 你的drone域名,没有则填IP:端口
  4. 没特殊情况推荐设置http
  5. 设置admin账户(必须),将name改成你的github账户名称
  6. 映射主机的端口号(我这里占用宿主机10086端口,使用drone容器中的80端口),对外的10086端口设置为你自定义端口,记得确认已配置白名单,不是https协议可以不配443

1.1 配置nginx

贴一份nginx的配置,这里主要映射了目录到宿主机/data/nginx的位置,方便修改配置,提前配置好上一步用到的域名,如果需要的话。

  docker run -d \
  -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /data/nginx/cert:/etc/nginx/cert \
  -v /data/docker_home:/home \
  --net host \
  --name nginx \
  nginx

2. 安装runner

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=xxx.com \ # 备注:1
  -e DRONE_RPC_SECRET=xxx \ # 备注:2
  -e DRONE_RUNNER_CAPACITY=2 \ # 备注:3
  -e DRONE_RUNNER_NAME=runner\
  -e TZ="Asia/GuangZhou" \
  -p 10088:3000 \
  --restart always \
  --name drone-runner \
  drone/drone-runner-docker:latest
  1. 填写drone域名,或IP:端口
  2. 同上一步drone容器配置的的RPC_SECRET一致,如果不是自己生成的那就是填Client Secret
  3. 最多同时执行任务数

3. 登录

打开配置好的网址,登录时会调起Github登录,登录你的Github账户即可。

image.png

点击右上角可同步你的仓库,会看到你所有的项目

点进你需要进行管理的项目(可以往github创建一个仓库测试),点击激活即可:

image.png

激活仓库之后可以进行一些配置,基本按如下即可,Trusted选项为管理员才可设置:
image.png

激活仓库时Drone会往仓库发送一条activie通知,此时对应仓库会设置进一个当前的webhook记录,不用手动去配置,非常方便。

4. 自动触发构建

接下来往测试仓库提交一条commit记录测试下

  1. 直接前往Github创建一个仓库d_test,进入Drone,点击右上角同步仓库,搜索d_test,点击Active按钮激活。
  2. d_test仓库根目录创建新文件 .drone.yml
kind: pipeline
type: docker
name: default

clone:
  disable: true

steps:
  - name: 编译步骤
    image: alpine
    commands:
      - echo hello drone

简单解释下上面的配置,首先这个文件目录与名称是可以自定义配置的,在Drone项目管理的Setting里:

image.png

配置文件注意缩进,type: docker是我们后面最主要使用的构建方式,你或许已经看出来了step里可以配置多个步骤,每个步骤都会拉取一份docker镜像使用一个临时的容器来运行,结束后立即销毁。

clone哪一行配置是将drone默认的clone步骤关闭了,由于网络问题clone仓库代码会比较耗时,后面会详细讲解实例如何自己编写一个clone操作。

  1. 回到Drone的项目管理,看到构建已经自动触发了:

image.png

image.png

而这时候这个项目也成为了活跃项目可以被筛选

image.png

至此Drone已经顺利跑起来了。

更多关于yml配置的编写在下一篇文章中会提到。

后记: 一个坑点

在Github配置Apps的时候,关注下这个地方的设置,有个token过期的机制最好退出一下,不然8小时后webhook就会失效,只能重新登录drone才会正常。

image.png

补充: 码云Gitee

drone从v2.7.2版本开始支持gitee 官网文档,部署方式和Github差不多,可以直接参考官网文档来配置,流程就是在Gitee创建第三方应用,获取Id和Key,记录下来,然后参照上面的流程即可。

如果配置Admin账户那一步不清楚用户名的话,点击码云的个人中心,看浏览器URL链接,/后面的就是你的用户名。

成功后登录时是这样的:

image.png

如果遇到仓库404问题,检查仓库名称与路径两者是否一致,采用驼峰写法它会"自作聪明"地给你把链接拆成带'-'的形式,这样drone识别仓库就会404了。

image.png

后面的就不用多说了,和Github是一样的。看了下Gitee做了个自动化推送Github的功能,可以同步两边的仓库,不过看起来以后要收费的样子,如果稳定免费的话那码云就非常业界良心了,我们也能从此摆脱Github时不时就失灵的困境,观望观望吧。

最近两天服务器连接Github直接504,我也把drone的仓库换成码云了。

相关文章
|
2月前
|
运维 监控 测试技术
自动化运维实践:CI/CD流程详解
【6月更文挑战第30天】CI/CD实践推动软件开发自动化,通过持续集成确保代码质量,自动部署提升交付速度。核心流程包括:代码管理(Git等)、自动化构建与测试、代码审查、部署。关键点涉及选择工具、测试覆盖率、监控及团队协作。采用CI/CD能减少错误,但需应对挑战,如工具选型、全面测试和团队沟通。
|
2月前
|
jenkins Java 持续交付
运用Jenkins实现Java项目的持续集成与自动化部署
在新建的Jenkins Job中,我们需要配置源码管理,通常选择Git、SVN等版本控制系统,并填入仓库地址和凭据。接着,设置构建触发器,如定时构建、轮询SCM变更、GitHub Webhook等方式,以便在代码提交后自动触发构建过程。
113 2
|
2天前
|
小程序 前端开发 持续交付
小程序全栈开发中的CI/CD流程与自动化部署是一种高效的开发模式。
本文探讨小程序全栈开发中的CI/CD流程与自动化部署,介绍持续集成与部署的概念,包括自动化构建、测试、代码审查及部署实践。通过提高代码质量、迭代速度及团队协作效率,确保小程序稳定运行与良好用户体验。
9 2
|
11天前
|
弹性计算 监控 JavaScript
【颠覆传统!】云效Flow——让你的CI/CD流程如虎添翼,轻松驾驭高效稳定的自动化部署之旅!
【8月更文挑战第8天】现代软件开发中,持续集成(CI)与持续部署(CD)至关重要。我最近使用了“云效Flow”,一款专为高效稳定的CI/CD流程设计的工具。它支持多种语言与框架,并易于集成第三方服务。只需注册并创建项目,平台便提供新手引导。以Node.js项目为例,代码托管在GitHub上后,在云效Flow中设置流水线,通过YAML自定义构建与测试步骤。代码提交后,构建自动执行。部署环节可利用内置策略,如一键发布到阿里云ECS,并支持蓝绿部署确保平滑切换。此外,云效Flow还具备监控与告警功能。总之,云效Flow简化了CI/CD流程,提高了开发效率与软件质量,适合各种规模的团队使用。
25 2
|
6天前
|
jenkins 持续交付 开发工具
自动化开发之旅:Docker携手Jenkins,与Git和Tomcat共舞持续集成
【8月更文挑战第13天】在软件开发中,持续集成(CI)通过自动化构建、测试与部署提升效率与稳定性。Docker、Jenkins、Git和Tomcat构成CI的黄金组合:`git push`触发Jenkins作业,利用Docker确保环境一致性,最终将应用部署至Tomcat。首先配置Git Webhooks以触发Jenkins;接着在Jenkins中创建作业并使用Docker插件模拟真实环境;通过Maven构建项目;最后部署至Tomcat。这套流程减少人为错误,提高开发效率,展示了技术的力量与流程的革新。
15 0
|
6天前
|
jenkins Java 持续交付
自动化魔法:用Jenkins打造Java项目的持续部署流水线
【8月更文挑战第13天】在软件开发中,自动化部署是提高效率与减少错误的关键。Jenkins作为一款强大的持续集成工具,支持Java项目的自动化构建、测试与部署。通过配置Jenkins及其丰富的插件生态(如Git和Maven插件),可实现从代码提交到上线的全自动化流程。此流程包括从GitHub自动拉取代码、使用Maven构建项目,并通过如`mvn clean install`命令执行构建,最后利用插件如“Publish Over SSH”将制品部署至远程服务器。此外,还可配置邮件通知等后处理动作确保发布的稳定可靠。借助Jenkins,开发者能显著加速软件交付周期,同时减少手动操作带来的风险。
17 0
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
1月前
|
监控 数据管理 测试技术
探索自动化测试的利剑:持续集成与持续部署(CI/CD)
【7月更文挑战第15天】在软件开发的浪潮中,自动化测试如同一柄锋利的利剑,它通过持续集成与持续部署(CI/CD)的实践,为软件质量保驾护航。本文将深入剖析自动化测试与CI/CD的结合如何提升开发流程的效率,确保软件的稳定性和可靠性,并探讨实施过程中的挑战及其解决策略,旨在为软件开发团队提供一条高效、可靠的质量保证之路。
|
1月前
|
Kubernetes Serverless 开发工具
代码提交即部署:Argo Workflows与EventBridge构建自动化CI
ACK One Serverless Argo工作流和EventBridge简单快速、高效、低成本地交付您的应用,为您实现代码提交即构建/交付的自动化CI系统。
|
1月前
|
敏捷开发 监控 Devops
探索自动化测试的利剑:持续集成与持续部署(CI/CD)在软件测试中的应用
在软件开发的快速迭代中,传统的手动测试方法已经无法满足效率和质量的双重需求。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来优化自动化测试流程,提升软件交付速度及质量保证水平。我们将分析CI/CD在测试中的关键作用,并通过实际案例数据展示其对提高测试覆盖率、缩短反馈周期和增强开发协作的积极影响。
65 0

热门文章

最新文章