基于Drone实现CI/CD【0到1架构系列】

CI/CD是持续性集成和持续性部署,简单来讲就是自动化构建和自动化部署。目前有很多集成方案,也有很多组装方案,只要能实现自动化构建出制品,再自动部署到生产环境就行。

目前很多源代码都集成了CI/CD功能,drone也是目前比较流行的一个方案,简单易用,高性能。

前提条件

已经使用Gitea部署作用源码管理,使用gitea搭建源码管理 。

已经使用Harbor部署私库,harbor 搭建和部署。

已经使用Portainer部署,portainer安装,配置,使用。

准备工作

拉取我们接下来CI/CD工作有可能会用到的docker镜像,后面会继续解释这些镜像的作用。

#自动构建
docker pull drone/drone
docker pull drone/drone-runner-docker#自动部署
docker pull drone/drone-runner-ssh
docker pull docker
docker pull plugins/docker
docker pull curlimages/curl

自动构建

drone是服务中心或者理解成任务中心,Git的webhook会通知到这里。

drone-runner-docker相当于实际参于构建工作的作业容器,drone-runner-docker定时与drone通讯获取构建任务,然后按规定的流程执行相应工作。这个流程的设计由.drone.yml配置文件决定,所以编写.drone.yml也是主要核心。

步骤一,设置Gitea的OAuth2登陆,因为drone采用OAuth2登陆方案。

登陆Gitea -> 右上角 -> 管理后台 -> 管理设置 -> 集成 -> 应用。创建应用,重定向 URI地址填写你部署的dron域名,例如:htts://drone.xxxx.com/login

步骤二,启动容器,可以单个容器启动,这里使用docker-compose进行管理。

version: "3"services:drone-server:image: drone:latestcontainer_name: droneenvironment:- DRONE_GITEA_SERVER=https://gitea.xxxx.com   #你部署的源码地址- DRONE_GITEA_CLIENT_ID=dadda5f7-a951-4e8a-a2de-ebf737a5bef5 #Oauth2登陆,客户端Id- DRONE_GITEA_CLIENT_SECRET=******************************** #Oauth2登陆,客户端密钥- DRONE_RPC_SECRET=aaaaaaaaaaaaaaaaaaa #与drone-runner通讯的凭据,随便填写- DRONE_SERVER_HOST=drone.xxxxx.com #绑定你的drone域名,用IP也行- DRONE_SERVER_PROTO=https #http,https 都可以- DRONE_TLS_CERT=/SSL/SSL.crt  #HTTPS证书- DRONE_TLS_KEY=/SSL/SSL.key   #HTTPS证书- DRONE_USER_CREATE=username:giteauser,admin:true #创建账号,这里需要填写你的gitea账号,默认管理员- DRONE_USER_FILTER=giteauser  #限制指定账号登陆restart: alwaysvolumes:- /SSL:/SSL #挂载证书- /etc/timezone:/etc/timezone:ro- /etc/localtime:/etc/localtime:roports:- "443:443"drone-runner:image: 	drone-runner-docker:latestcontainer_name: drone-runnerenvironment:- DRONE_RPC_PROTO=https- DRONE_RPC_HOST=drone.xxxxx.com:443  #drone的域名或IP- DRONE_RPC_SECRET=aaaaaaaaaaaaaaaaaaa #drone通讯的凭据,填写上面的凭据- DRONE_RUNNER_CAPACITY=2 #工作线程数- DRONE_RUNNER_NAME=my-runnerrestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.sock  #挂载docker.sock,必需- /etc/timezone:/etc/timezone:ro- /etc/localtime:/etc/localtime:ro

启动容器之后,访问drone域名就可以看到登陆页面,点击“CONTINUE”,就会跳转Gitea登陆,登陆就会授权成功返回drone界面。

步骤三,设置webhook。

进入drone界面之后,点击右上角的"SYNC"按钮,就会把Gitea项目同步过来,点击项目 -> Settings -> ACTIVATE REPOSITORY ,就自动在gitea相应的项目上面添加webhook。

查看Gitea的webhook。

在drone界面,设置项目的“Trusted”,这点非常重要,否则在后续构建中尽管挂载了docker.sock,仍然会提示如下错误,如果没有这个选项,是由于启动drone容器没有填写DRONE_USER_CREATE的原因。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
exit status 1

步骤四,至此自动构建就算搭建成功,接下来就是编写.drone.yml文件,需要将/var/run/docker.sock挂载进去,drone-runner实际上使用母机的docker在构建制品,也就是说构建成功之后镜像在母机上通过docker images就能查询出来。

下面示例使用Dockerfile文件进行构建,plugins/docker:latest镜像是预先设置好,具有基于dockerfile构建和推送功能的镜像。

kind: pipeline
type: docker
name: defaultsteps:- name: 构建&推送  #管道名称image: plugins/docker:latestvolumes:- name: dockersockpath: /var/run/docker.socksettings:registry: harbor.xxxxx.com #你部署的docker私库地址repo: harbor.xxxxx.com/project/webtags: latestdockerfile: ./Dockerfilepull_image: false #构建的时候是否强制拉取最新镜像username: abcpassword: 123volumes: #挂载
- name: dockersockhost:path: /var/run/docker.sock

也可以使用docker镜像,自行编写命令进行构建。

kind: pipeline
type: docker
name: defaultsteps:- name: 构建&推送  #管道名称image: docker:latestvolumes:- name: dockersockpath: /var/run/docker.sockcommands:- docker build -t web:latest .- docker image tag web:latest harbor.xxxxx.com/project/web:latest- docker push web:latest harbor.xxxxx.com/project/web:latestvolumes: #挂载
- name: dockersockhost:path: /var/run/docker.sock

步骤五,至此自动构建和推送到私库,基本就搭建完成。每次打包制品之后镜像都不会主动删除,所以我们可以增加多一个流程来删除剩余的镜像。

kind: pipeline
type: docker
name: defaultsteps:- name: 清理镜像  #管道名称image: docker:latestvolumes:- name: dockersockpath: /var/run/docker.sockcommands:- docker images --filter=reference='harbor.xxxxx.com/project/web:*' --format '{{.ID}}' | xargs -I {} docker rmi -f {}volumes: #挂载
- name: dockersockhost:path: /var/run/docker.sock

自部部署

方式一,SSH远程登陆,拉取镜像,重新部署。

kind: pipeline
type: docker
name: defaultsteps:- name: SSH部署  #管道名称image: drone/drone-runner-ssh:latestsettings:host: 192.168.3.78username: rootpassword: 123port: 22script: #部署执行动的命令- echo ====开始部署=======- docker pull harbor.xxxxx.com/project/web:latest- docker stop web- docker rm web- docker run -d --name web -p 80:8080  harbor.xxxxx.com/project/web:latest- echo ====部署成功======

方式二,通过Portainer的webhook进行更新。

进入portainer管理界面,进入容器详情页,开启容器的webhook,复制通地址。

kind: pipeline
type: docker
name: defaultsteps:- name: Portainer部署 #管道名称image: curlimages/curl:latestcommands:- curl -X POST "https://portainer.xxxx.com/api/webhooks/983DB2D1-34B8-4527-087B-08D76FE58AE5"

部署完成通知

部署完成之后,开发者可以通过drone管理界面查看进度,或者通过webhook通知推送成功消息到微信,短信,邮件,钉钉等。

kind: pipeline
type: docker
name: defaultsteps:- name: 部署完成通知 #管道名称image: curlimages/curl:latestcommands:- curl -X POST "通知的webhook地址"

一个完整的示例如下:

kind: pipeline
type: docker
name: defaultsteps:- name: 构建&推送  #管道名称image: plugins/docker:latestvolumes:- name: dockersockpath: /var/run/docker.socksettings:registry: harbor.xxxxx.com #你部署的docker私库地址repo: harbor.xxxxx.com/project/webtags: latestdockerfile: ./Dockerfilepull_image: false #构建的时候是否强制拉取最新镜像username: abcpassword: 123- name: 清理镜像  #管道名称image: docker:latestvolumes:- name: dockersockpath: /var/run/docker.sockcommands:- docker images --filter=reference='harbor.xxxxx.com/project/web:*' --format '{{.ID}}' | xargs -I {} docker rmi -f {}- name: Portainer部署 #管道名称image: curlimages/curl:latestcommands:- curl -X POST "https://portainer.xxxx.com/api/webhooks/983DB2D1-34B8-4527-087B-08D76FE58AE5"- name: 部署完成通知 #管道名称image: curlimages/curl:latestcommands:- curl -X POST "通知的webhook地址"volumes: #挂载点,共用
- name: dockersockhost:path: /var/run/docker.sock

运行效果:

文章转载自:老猿新码

原文链接:https://www.cnblogs.com/netcore3/p/18325616

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还在用JVM跑你的Java代码吗?太慢了,试试Oracle的GraalVM吧

前言 对于Java开发者们来说,几乎每天都在和JVM打交道,然而JVM即将过时了。那些对新技术保持敏锐洞察力的开发者,可能已经在生产环境中部署GraalVM生成的二进制程序了,小伙伴们,你们已经用起来了吗? Graal…

【初阶数据结构题目】3.删除有序数组中的重复项

文章目录 顺序表算法题代码: 顺序表算法题 点击链接做题 删除有序数组中的重复项 思路:定义两个指针变量。dst指向数组第一个位置,src指向数组第二个位置。判断nums[dst]是否等于nums[src] 相等,src不相等,dst,nums[…

Windows 11 桌面模拟

Windows 11 桌面模拟 文章目录 Windows 11 桌面模拟代码结构HTML结构CSS样式JavaScript功能 源码效果图 代码结构 HTML结构 <html>: HTML文档的根元素。<head>: 包含文档的元数据&#xff0c;如标题和样式。<base>: 指定相对URL的基准。<title>: 指定…

力扣刷题160 相交链表

题目 力扣题目地址&#xff0c;点此可直接跳转 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 来源&#xff1a;力扣&…

60、redis安装和部署

一、关系型数据库与非关系型数据库 1.1、关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上一般面向于记录。SQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0…

pycharm 新建Python项目 使用anaconda环境

1.pycharm 新建完Python项目 2.文件-设置-具体项目-Python解释器-添加解释器-Conda执行文件选择你自己anaconda安装目录下Scripts\conda.exe -加载环境-选择现有的Conda环境或者新建一个环境

将gitee 上的nvim 配置 从gitee 上下载下来,并配置虚拟机

首先是下载 gitee 上的配置。 然后是 配置 tmux 然后是配置nvim . 1 在init.lua 文件中注释掉所有的与第三方插件有关的内容。 2 在packer 的文件中 &#xff0c; 注释掉所有的与 第三方插件有关的代码。 3 首先要保证 packer 能够正确的安装。 4 然后开始 安装 所有的插件…

自动化立体库各种故障解除方案

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 堆垛机故障解除方案核心内容&#xff1a; 故障代码与可能原因&#xff1a; F01&#xff…

SpringDataJPA(三):多表操作,复杂查询

一、Specifications动态查询 有时我们在查询某个实体的时候&#xff0c;给定的条件是不固定的&#xff0c;这时就需要动态构建相应的查询语句&#xff0c;在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …

五大AI测试开源框架及使用方法介绍

AI测试框架是一套系统的测试工具和方法&#xff0c;包括测试的规范和基础代码&#xff0c;涵盖了一系列的测试思想和方法。这些框架可以帮助开发者和测试人员对AI模型进行测试&#xff0c;确保AI模型在真实世界的应用中能够达到预期的效果。接下来的内容&#xff0c;我们将介绍…

可视化目标检测算法推理部署(一)Gradio的UI设计

引言 在先前RT-DETR模型的学习过程中&#xff0c;博主自己使用Flask框架搭建了一个用于模型推理的小案例&#xff1a; FlaskRT-DETR模型推理 在这个过程中&#xff0c;博主需要学习Flask、HTML等相关内容&#xff0c;并且博主做出的页面还很丑&#xff0c;那么&#xff0c;是…

大模型微调:参数高效微调(PEFT)方法总结

PEFT (Parameter-Efficient Fine-Tuning) 参数高效微调是一种针对大模型微调的技术&#xff0c;旨在减少微调过程中需要调整的参数量&#xff0c;同时保持或提高模型的性能。 以LORA、Adapter Tuning 和 Prompt Tuning 为主的PEFT方法总结如下 LORA 论文题目&#xff1a;LORA:…

[Linux安全运维] MySQL 数据库安全配置

MySQL 安全配置 1 .1 MySQL备份 1 .1 .1 命令 1.数据库备份 mysqldump -uroot -p123456 bbs > /tmp/bbs.sql2.删除数据库 drop database bbs;3.创建数据库 create database bbs character set utf8;4.导入备份 mysql -uroot -p123456 bbs < /tmp/bbs.sql5.sql 语句…

java计算器,输入公式和对应变量的值

目标&#xff1a;最近想写个东西&#xff0c;本质就是一个计算器&#xff0c;我们可以输入公式&#xff08;例如&#xff1a;ab&#xff09;&#xff0c;然后把公式的值&#xff08;a:10,b:20&#xff09;也输入进去。最后得到结果。核心&#xff1a;这个想法核心部分就是给一个…

OpenCV C++的网络实时视频流传输——基于Yolov5 face与TCP实现实时推流的深度学习图像处理客户端与服务器端

前言 在Windows下使用TCP协议&#xff0c;基于OpenCV C与Yolov5实现了一个完整的实时推流的深度学习图像处理客户端与服务器端&#xff0c;为了达到实时传输的效果&#xff0c;客户端使用了多线程的方式实现。深度学习模型是基于onnxruntime的GPU推理。&#xff0c;实现效果如…

Web基础、apache和nginx的知识及服务搭建

一、Web基础概念和常识 Web&#xff1a;为用户提供的⼀种在互联网上浏览信息的服务&#xff0c;Web 服务是动态的、可交互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联网服务&#xff0c;这些服务包括信息浏览服务&#xff0c;以及各种交互式服务&#xff0c;包括聊…

Windows 11 实现移动热点自启动

原文链接&#xff1a;https://blog.iyatt.com/?p16784 背景 公司的 WiFi 用起来很卡&#xff0c;但是电脑有线使用网络又是正常的&#xff0c;另外我用的那台台式机是有无线网卡的&#xff0c;平时就是用电脑开热点给手机用&#xff0c;但是每次开机都要自己手动启动就麻烦&…

【云原生】Kubernetes中crictl的详细用法教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

心动小站Ⅸ--Nvidia一种夸张的增长

当有灭绝级别的威胁时&#xff0c;你希望它如何出现在头版&#xff1f;华尔街日报或 CNN 的新闻中说它即将发生&#xff1f; 大多数新闻都是在灾难发生后才传到你耳中的。谈到人工智能&#xff0c;我们已经收到了很多警告&#xff0c;这些警告来自各个领域的专家&#xff0c;比…