使用Drone+gitea配置自己的CICD流程
什么是CI CD
CI CD一般包含三个概念:持续集成(Continuous Integration ,CI),持续交付(Continuous Delivery),持续部署(Continuous Deploy)。他是一种软件开发实践,核心是通过引入自动化的手段来提高软件交付效率。其最终目的是为了让工程师更快,更高质量,更简单的交付软件。
持续集成
在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后,所谓集成,可以理解为团队里的大家完成自己负责的模块后,将各个子模块集成为一个可以完成整体功能的完整模块。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生。
为了实现持续集成,我们每个人都要单元测试(unit test),保证各个子模块的正常工作。
持续交付
持续交付是持续集成的延伸,将集成后的代码部署到类生产环境,确保可以以可持续的方式快速向客户发布新的更改。我们把代码部署到测试环境,预发布环境等等类生产环境成为交付。
持续部署
如果真的想获得持续交付的好处,应该尽早部署到生产环境,以确保可以小批次发布,在发生问题时可以轻松排除故障。于是有了持续部署。
我们通常将这个在不同环境发布和测试的过程叫做部署流水线。
持续部署是在持续交付的基础上,把部署到生产环境的过程自动化。
Gitea
gitea是一款开源,由Golang编写的可自运营的代码管理仓库,相对来说gitlab功能最为全面且内置CI,但是其对内存与cpu的开销更大,而gitea更为轻量化,日常运行占用的内存仅仅只有200mb上下,对于个人开发者来自己的云服务器往往只有2核4G甚至1核1G的配置,那么性能开销就显得弥足珍贵。
Drone
drone是一款开源的持续集成核持续交付平台,他可以帮助开发者自动化构建,测试核部署应用程序,drone的核心特点就是轻量级,他使用docker容器来运行构建核测试任务,这使得它可以快速的启动和销毁环境,从而提高了效率和可靠性,drone的部署十分简单,可以通过docker轻松部署,同时drone提供可视化的web界面和cli工具,方便用户管理和监控构建任务的状态和结果。
开始部署
我使用的系统是ubuntu22.04,采用的docker部署。
这里我们均使用docker-compose来部署,不知道什么是docker-compose的同学可以先去了解一下docker及docker-compose。
Docker Compose是一个用于定义和运行多个Docker容器的工具。它使用YAML文件来配置应用程序的服务,并可以在单个命令中启动、停止和重建所有服务。Docker Compose可以帮助开发人员和运维人员更轻松地管理多个Docker容器,并提供了一种简单的方法来定义和管理应用程序的依赖关系。
Gitea docker-compose
version: "3" services:
server:
image: gitea/gitea:1.19.0
container_name: gitea
restart: always
volumes:
- ./data:/var/lib/gitea
- ./config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"
~
编辑成docker-compose.yml文件输入docker compse up -d命令,docker就会根据编排好的文件自动创建容器及映射数据卷
这里我使用的端口是3000,gitea的默认端口也是3000,访问对应地址
这里需要我们进行一些默认配置,这里我选择使用sqlite数据,这样避免了还需要部署一个数据库容器,其他的我们使用默认配置即可。
部署成功后的默认界面如图,点击右上角登录,第一个注册的账号就是管理员账号
我们注册完第一个账号即管理员账号后,接下来我们注册一个Drone专用的账号,当然你也可以就把管理员账号给Drone来用。
点击右上角用户头像->设置->应用进入如下界面
应用名称为自定义的OAuth2授权名称,可随便取。
重定向URL十分重要,必须为接下来要部署的drone server的网站地址,如果不是域名的话还需带上端口,且以/login结尾
点击创建应用后保存生成的客户端ID及客户端密钥,待会创建drone server时要使用
Drone docker-compose
Drone分为drone server和drone runner两部分
drone server
version: "3" services:
drone:
image: drone/drone:2
container_name: drone
environment:
- DRONE_GITEA_SERVER=http://110.41.160.73:3000
- DRONE_GITEA_CLIENT_ID=9c77ba3c-9d13-49ae-a7a5-cfbd6a7993c2
- DRONE_GITEA_CLIENT_SECRET=gto_zbxh6gznvbsrpskwf25ti4r7iltfe2ysjkl75hjst6dfcyuxl4oa
- DRONE_RPC_SECRET=as103208900
- DRONE_SERVER_HOST=110.41.160.73:3001
- DRONE_SERVER_PROTO=http
- DRONE_USER_CREATE=username:drone,admin:true
restart: always
volumes:
- ./drone:/data
ports:
- 3001:80
DRONE_GITEA_SERVER:你的gitea服务器地址
DRONE_GITEA_CLIENT_ID:你创建的OAtuh2授权的客户端ID,即是上一步中要求保存的客户端ID
DRONE_GITEA_CLINIE_SECRET:你创建的OAtuh2授权的客户端密钥,即是上一步中要求保存的客户端密钥
DRONE_RPC_SECRET:drone server与drone runner通信设定的密码,可自由设置,在接下来的drone runner的docker compose中也有这个参数,必须与此处相同
DRONE_SERVER_HOST:你设置的drone server地址,可以是域名,如果不是的话则必须是带端口的ip地址,且此处设置的端口必须与
DRONE_SERVE_PROTO:设置服务器的协议,如http或https
DRONE_USER_CREATE:指定某个用户为管理员,管理员有权管理其他账户,编辑仓库详细信息,编辑仓库信任标志,访问受限制的API。注意,此处设置的username:drone,其名称就是你给drone准备的gitea的账户名称,最好是把这个账号指定为管理员,否则非管理员无法设置某个仓库为受信任仓库,而非受信任的仓库是无法挂载数据卷的
同样是创建docker-compose.yml后输入docker compose up -d创建容器
访问对应地址取得gitea账户授权后如下
drone runner
version: "3" services:
runner:
image: drone/drone-runner-docker:1
container_name: runner
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=110.41.160.73:3001
- DRONE_RPC_SECRET=as103208900
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=my-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 3002:3000
DRONE_RPC_PROTO:部署的服务器协议,如http,https
DRONE_RPC_HOST:部署的服务器地址,如果不是域名的话必须带上端口
DRONE_RPC_SECRET:与drone server通信的密钥
DRONE_RUNNER_CAPACITY:设置同时运行的流水线数量
DRONE_RUNNER_NAME:设置drone runner引用名称
同样是保存成docker-compose.yml后以docker compose up -d命令启动容器
自此,drone与gitea都部署成功
编写.drone.yml
我们创建一个项目,并且用vs添加docker支持,自动生成dockerfile
创建一个.drone.yml文件且必须放在最外层
kind: pipeline
type: docker
name: default clone:
skip_verify: true steps:
- name: publish
image: docker:dind
environment:
IMAGE: myfirst-cicdtest
CONTAINERNAME: testcdcidcontainer
volumes:
- name: dockersock
path: /var/run/docker.sock
commands:
- docker stop $CONTAINERNAME
- docker rm $CONTAINERNAME
- docker rmi $IMAGE
- docker build -t $IMAGE .
- docker run -d -p 5056:80 --name $CONTAINERNAME $IMAGE volumes:
- name: dockersock
host:
path: /var/run/docker.sock
其中steps中为主要构建命令
name:运行步骤的名称
image:依赖的基础镜像
environment:设置的变量,以键值对方式
volumes:挂载的数据卷设置,此处为容器内部地址
commands:运行命令
此处我是以docker部署,所以在每次跑流水线过程前都得先把旧有的容器,镜像删除才能创建新的容器镜像,因此当流水线第一次运行时并不需要这个删除的步骤,但是这种处理方式并不稳妥,实际上较为合理的方式应该是配合k3s或k8s集群,此处的构建只负责打包镜像,由集群来负责部署项目,奈何我暂时不会玩k3s或k8s,等以后有了涉猎之后再来对此处修改。
使用Drone+gitea配置自己的CICD流程的更多相关文章
- Gerrit+apache+H2数据库简单安装配置及建库流程
Gerrit 是一个基于 Web 的代码评审和项目管理的工具,面向基于 Git 版本控制系统的项目.因此需要Apache.Mysql.GIT等相关软件的支持 系统配置: 新装的UBANTU LINUX ...
- SpringBoot项目构建、测试、热部署、配置原理、执行流程
SpringBoot项目构建.测试.热部署.配置原理.执行流程 一.项目构建 二.测试和热部署 三.配置原理 四.执行流程
- 基于Gitlab的CICD流程
本片文章主要初步介绍什么是CICD流程,并且把整个流程进行拆分理解整个流程的跑通过程. 1.CICD概述 什么是CICD呢? 简单的说CICD就是持续集成自动构建自动测试自动部署. 从概念上就可以看出 ...
- 基于jenkins+kubernetes的cicd流程实践一:环境搭建及方案原理实现
1.基础环境:Centos7.9,kubernetes:v1.21.5 node-1@112(master):docker,containerd,harbornginx(80),git,etcd no ...
- MyCat源码分析系列之——配置信息和启动流程
更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...
- struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】
入门框架学习避免不了的问题: 1. 什么是框架? 简单的说,框架就是模板,模子,模型.就是一个可重用的半成品. 2. 如何学习框架? 学习框架其实就是学习规则,使用框架就是遵循框架的规则,框架是可变的 ...
- sublime 官方正版,自己用的插件配置,最轻量级安装流程
到了一家新公司,新的办公电脑,移动工作站哦,配置很酷.需要自己安装编码环境,node.js(http-server)是必须要装的,编辑器个人比较喜欢sublime,现在归纳一下配置流程,ps:本人有点 ...
- Python--day62--Django安装,配置,web请求流程,views.py总结
1,安装Django 2,创建Django项目: 3,配置Django项目 1.settinngs.py文件 1.templates文件夹的位置 2.静态文件 1,STATIC_URL ----- ...
- Dubbo 配置的加载流程
配置加载流程 在SpringBoot应用启动阶段,Dubbo的读取配置遵循以下原则 Dubbo支持了多层级的配置,按照预先定义的优先级自动实现配置之间的覆盖,最终所有的配置汇总到数据总线URL后,驱动 ...
- 超详细教程2021新版oracle官网下载Windows JAVA-jdk11并安装配置(其他版本流程相同)
异想之旅:本人博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章发布平台为CSDN.博客园.简书和开源中国,后期可能会有个人博客,除此之外 ...
随机推荐
- 德国坦克傲龙7.1PCIe | 魔音师 声源PCIe MaX 声卡驱动皮肤
适用于德国坦克傲龙7.1PCIe和魔音师 声源PCIe MaX 声卡驱动皮肤的皮肤. 皮肤使用方法:退出声卡驱动程序(托盘图标右键退出),之后删除声卡驱动目录里面的TERRATECAudioCente ...
- 创建镜像发布到镜像仓库【不依赖docker环境】
image 工具背景 如今,docker镜像常用于工具的分发,demo的演示,第一步就是得创建docker镜像.一般入门都会安装docker,然后用dockerFile来创建镜像,除此以外你还想过有更 ...
- 微软博客上几篇 Semantic-kernel (SK)文章
自从最近微软开源Semantic-kernel 来帮助开发人员在其应用程序中使用AI大型语言模型(LLM)以来,Microsoft一直在忙于改进它,发布了有关如何使用它的新指南并发布了5篇文章介绍他 ...
- 企业什么喜欢做电视看板,电视看板浏览网页的必备工具 电视看板浏览器 电视看板自动打开网页 电视看板必备APP
企业喜欢做电视看板主要是因为它可以提供以下几个方面的优势: 增强企业形象:电视看板可以将企业的信息和广告以更加生动.直观的方式呈现出来,提高企业形象和知名度. 提高工作效率:电视看板可以在企业内部作为 ...
- 为什么我推荐你使用 systemd timer 替代 cronjob?
概述 前几天在使用 Terraform + cloud-init 批量初始化我的实验室 Linux 机器.正好发现有一些定时场景需要使用到 cronjob, 进一步了解到 systemd timer ...
- python之zipfile应用
zipfile Python 中 zipfile 模块提供了对 zip 压缩文件的一系列操作. 1 f=zipfile.ZipFile("test.zip",mode=" ...
- Semantic Kernel 入门系列:💬Semantic Function
如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...
- Android View的事件分发机制-源码解析
为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志: 然后把我们自定义的按钮加到主布局文件中: public clas ...
- PyInstaller打包的文件闪退
问题描述:使用PyInstaller打包的pycharm写的python程序,打包好后从windows上打开一直闪退 一.双击exe文件闪退,从cmd命令行中与加载程序,可以看到具体的报错 D:\di ...
- Python程序笔记20230301
打印九九乘法表 for i in range(1, 10): for j in range(1, i+1): print(i, "x", j, "=", i * ...