使用Docker部署自动化CI/CD平台Drone

简介: [Drone](https://drone.io) 是一个现代化的持续集成平台,能够使用强大的云原生管道引擎自动化他们的构建、测试和发布工作流程,让我们不再关注程序如何发布而是如何去实现,去更好的实现。

Drone 是一个现代化的持续集成平台,能够使用强大的云原生管道引擎自动化他们的构建、测试和发布工作流程,让我们不再关注程序如何发布而是如何去实现,去更好的实现。

Drone并不是一个服务组成的,它分为管理端(Drone UI)、运行节点(Drone Runner),需要部署一套管理端,而运行节点可以部署多套,这个根据实际业务场景而定,如果在使用过程中同时构建的项目较多可以考虑增加运行节点。

支持的代码托管平台

下面我们使用自行搭建的Gitea私服平台来部署Drone,实现项目持久化构建。

Drone是根据代码托管平台的代码仓库状态变动来触发自动构建,如果想通过互联网的代码托管平台使用的话需要将 Drone部署在互联网上,代码托管平台可以访问到才行。

搭配Gitea平台使用

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,提供多种部署方式,支持Docker部署,支持将数据存储至SQLite3、MySQL、PostgreSQL、外挂卷等。

有关Docker方式搭建Gitea可以参考详细的部署文档:https://docs.gitea.io/en-us/install-with-docker/

创建Gitea OAuth2应用

deploy-drone-with-docker-1.png

在上图中重定向地址为Drone登录地址,Gitea必须要访问到才可以。

deploy-drone-with-docker-2.png

Gitea的准备工作已经做完了,下面我们来部署管理端(Drone UI)以及运行节点(Drone Runner)。

部署Drone UI

拉取镜像

# 拉取最新版本的drone
docker pull drone/drone:latest

启动管理端

docker run -p 8080:80 -p 10443:443 --name=drone --volume=/usr/local/docker/drone/gitea/data:/data 
--env=DRONE_GITEA_SERVER=https://code.yuqiyu.com
--env=DRONE_GITEA_CLIENT_ID=742d414c-464c-4e08-90b1-228e07f0b5fa 
--env=DRONE_GITEA_CLIENT_SECRET=fq6r0pvmIS5tyRmItqYskJl5RFqI5cTnhzdJe8MmGSc=  
--env=DRONE_RPC_SECRET=hengboy
--env=DRONE_SERVER_HOST=drone.yuqiyu.com
--env=DRONE_USER_CREATE=username:hengboy,admin:true 
--env=DRONE_SERVER_PROTO=https 
--env=DRONE_LOGS_TRACE=true --detach=true --restart=always drone/drone:latest

启动参数:

  • DRONE_GITEA_SERVER:配置Gitea服务的地址,支持http/https协议地址,如:https://code.yuqiyu.com
  • DRONE_GITEA_CLIENT_ID:配置在Gitea开通的OAuth应用的ClientId
  • DRONE_GITEA_CLIENT_SECRET:配置在Gitea开通的OAuth应用的ClientSecret
  • DRONE_RPC_SECRET:配置与Drone Runner之间通信的秘钥,启动Drone Runner时必须提供一样的秘钥
  • DRONE_SERVER_HOST:配置部署Drone服务的地址,支持使用域名或IP地址,如:drone.yuqiyu.com
  • DRONE_SERVER_PROTO:配置部署Drone服务的协议,可选httphttps
  • DRONE_USER_CREATE:启动时创建的账号并配置该账号用于管理员的权限,可以直接配置Gitea内的用户。

更多配置参数详见:https://docs.drone.io/server/reference/

启动成功后我们访问地址就可以看到如下界面:

deploy-drone-with-docker-3.png

点击CONTINUE按钮可以跳转到Gitea服务来进行OAuth应用的认证,认证成功后会跳转到在OAuth应用配置的回调地址,首页如下所示:

deploy-drone-with-docker-4.png

第一次登录时会自动同步账号下所拥有权限的仓库列表,如果后续新增了仓库可以通过点击SYNC同步按钮进行同步。

部署Drone Runner

拉取镜像

# 拉取最新的Drone Runner镜像
docker pull drone/drone-runner-docker:latest

启动Runner

docker run -d -v /var/run/docker.sock:/var/run/docker.sock 
-e DRONE_RPC_PROTO=https 
-e DRONE_RPC_HOST=drone.yuqiyu.com
-e DRONE_RPC_SECRET=hengboy 
-e DRONE_RUNNER_CAPACITY=2 
-e DRONE_RUNNER_NAME=drone-runner 
-e DRONE_LOGS_TRACE=true 
-p 3000:3000 --restart always --name drone-runner drone/drone-runner-docker:latest

启动参数:

  • DRONE_RPC_HOST:配置连接Drone服务端的地址,以接收执行消息
  • DRONE_RPC_PROTO:配置连接Drone服务端的协议,可选httphttps
  • DRONE_RPC_SECRET:配置与Drone服务端的通信秘钥,必须与Drone服务端启动参数配置一致
  • DRONE_RUNNER_CAPACITY:配置并发执行管道的数量,默认为:2
  • DRONE_RUNNER_NAME:配置Runner的名称,便于追溯

更多配置参数详见:https://docs.drone.io/runner/docker/configuration/reference/

验证Runner是否启动成功

# 查看runner运行日志
docker logs -f drone-runner

time="2022-08-16T01:51:12Z" level=debug msg="successfully pinged the docker daemon"
time="2022-08-16T01:51:12Z" level=info msg="starting the server" addr=":3000"
time="2022-08-16T01:51:13Z" level=info msg="successfully pinged the remote server"
time="2022-08-16T01:51:13Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="https://drone.yuqiyu.com" kind=pipeline os=linux type=docker

Drone自动构建项目

在上面我们已经将Drone的管理端以及运行节点配置好了,下面我们来根据步骤实现项目的自动构建。

步骤1:期望触发构建条件

我们期望项目源码一旦Push到远程git仓库后自动触发编译,而且仅限于develop分支。

步骤2:配置Drone

如果想要项目支持Drone,那么我们需要再项目根目录下新增.drone.yml配置文件,内容如下所示:

kind: pipeline
name: minbox-datasource-switch
steps:
  - name: build
    image: maven:3.6.3-jdk-11
    commands:
      - mvn clean
    when:
      branch: develop
      event: [ push ]

上面的配置就可以满足我们的期望,当检测到代码push后会自动触发minbox-datasource-switch流水线的全部满足条件的stepssteps允许配置多个步骤,会根据配置步骤的顺序依次执行。

步骤3:激活Drone项目

还剩下最重要的一步,我们需要再Drone管理端激活项目,才可以进行处理构建项目,如下图所示:

deploy-drone-with-docker-5.png

项目激活后,一旦收到符合条件的变动通知就会进行构建,如下图所示:

deploy-drone-with-docker-6.png

点击每条构建记录时都可以查看详细的构建日志,如下图所示:

deploy-drone-with-docker-7.png

Drone Cloud

Drone Cloud是部署在云端在线的管理端,该管理端是免费的,可以授权GitHub来实现项目的构建,不过GitHub也推出了自己的构建工具GitHub Action,对于GitHub代码库而言所支持的功能应该会比Drone更多、更细,但是Drone不仅面向GitHub还有多个平台可供选择,如有需要可以访问:https://cloud.drone.io/,了解并使用。

总结

程序员最可贵的是编写高质量的代码,对于持续部署这种事情交由一个放心的工具去做,可以很大的提高编码效率,从而有更多的时间去学习新的知识,Drone搭配私有化部署的代码平台很完美,它所能做的还远远不止上述描述的那样。

相关文章
|
4天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
90 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
3天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
18天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
37 5
|
20天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
47 4
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
38 3
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
1月前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
4月前
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
688 0
【云原生】阿里云服务器部署 Docker Swarm集群
下一篇
DataWorks