GitLab基于Drone搭建持续集成(CI/CD)
本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。
1. 准备工作
创建OAuth应用
创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。


ps:授权回调 URL 必须与以下格式和路径匹配,并且必须使用确切的服务器方案和主机。
2. 创建共享密钥
创建共享密钥以验证运行程序与中央 Drone 服务器之间的通信。
您可以使用 openssl 生成共享密钥:openssl rand -hex 16
3. 部署runner :
在服务创建一个文件夹,可以命名为drone,里面放docker-compose.yml和.env文件。文件内容如下:
docker-compose配置文件:
version: '3'services:drone-server:image: drone/drone:2ports:- 8280:80- 443:443volumes:- /var/lib/drone:/data- /root/.ssh:/root/.ssh/restart: alwaysenvironment:- DRONE_GITLAB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID} #您的 GitLab oauth 客户端 ID- DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET} #GitLab oauth 客户端密钥- DRONE_RPC_SECRET=${DRONE_RPC_SECRET} #提供在上一步中生成的共享密钥。这用于验证服务器和 runner 之间的 rpc 连接。- DRONE_SERVER_HOST=${DRONE_SERVER_HOST} 您的外部主机名或 IP 地址。如果使用 IP 地址,则可以包含端口。- DRONE_SERVER_PROTO=http #外部协议方案。此值应设置为 http 或 https。如果您配置 ssl 或 acme,则此字段默认为 https。- DRONE_GITLAB_SERVER=http://gitlab.com # 您的gitlab服务器URL- DRONE_USER_CREATE=username:YPF,admin:true # 管理员账户drone-runner:image: drone/drone-runner-docker:latestrestart: alwaysdepends_on:- drone-servervolumes:- /var/run/docker.sock:/var/run/docker.sock- /root/.ssh/:/root/.ssh/environment:- DRONE_RPC_PROTO=http- DRONE_RPC_HOST=${DRONE_SERVER_HOST}- DRONE_RPC_SECRET=${DRONE_RPC_SECRET}- DRONE_RUNNER_CAPACITY=2- DRONE_RUNNER_NAME=${HOSTNAME}
.env:
DRONE_GITHUB_CLIENT_ID=xxx
DRONE_GITHUB_CLIENT_SECRET=xxx
DRONE_RPC_SECRET=xxx
DRONE_SERVER_HOST=192.168.xx.xx:8280
拉取镜像并部署runner,运行命令:docker-compose up -d
直接拉取docker镜像,一般情况下都会报错、超时拉取不到
restore-cache: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
解决办法
配置国内docker镜像源:
{"registry-mirrors": ["https://yt7qrop4.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com","https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://your_preferred_mirror","https://dockerhub.icu","https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}
上面为加速器地址,需要把下面代码放到/etc/docker/daemon.json这个文件内(没有这个文件就创建一个)
换源之后执行以下指令: systemctl daemon-reload
重新加载配置 systemctl restart docker 重新启动docker
验证
运行docker ps可以看到以下容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b1704182e38 drone/drone-runner-docker:latest "/bin/drone-runner-d…" 3 months ago Up About a minute 3000/tcp drone-drone-runner-1
69cecad7b541 drone/drone:2 "/bin/drone-server" 3 months ago Up About a minute 0.0.0.0:443->443/tcp, 0.0.0.0:8280->80/tcp drone-drone-server-1
运行起来后,浏览器输入http://192.168.xx.xx:8280/就可以访问到了。
点击CONTINUE按钮会跳转到gitlab的授权页面,授权完之后会跳回来,注册一下。
注册完进去就可以看见我们gitlab上面所有的仓库了。

选一个仓库进去,点击激活按钮activate,激活成功后,会在gitlab仓库里面添加一个WebHooks,可以到gitlab去看看。

setting里面的Secrets可以设置一些敏感的参数,比如密码,密钥那些。

设置好之后可以在pipeline里面用from_secret语法使用。
4. Docker Pipelines
这一步是配置构建流水线了。
在git仓库根目录添加一个文件.drone.yml,在这里面定义流水线步骤。
kind: pipeline
type: docker
name: front-web-publishsteps:
# 加载依赖
- name: restore-cacheimage: drillster/drone-volume-cachevolumes:- name: cachepath: /drone/src/node_modulessettings:restore: true- name: build-projectimage: node:lts-slimprivileged: truevolumes: #将容器内目录挂载到宿主机- name: cachepath: /drone/src/node_modules- name: build-htmlpath: /htmlcommands:- |if [ -f /html/yarn.lock ]; thencp -f /html/yarn.lock ./yarn installelseyarn installfi- npm run build- |if [ "$(ls -A /html)" ]; thenrm -rf /html/*fi- cp yarn.lock /html/yarn.lock- cp -r ./dist /html/forward- cp ./common/shell/Dockerfile /html/Dockerfile- cp ./common/shell/build.sh /html/build.sh- tar -zcvf ./front-web.tar.gz /html/- cp -rf ./front-web.tar.gz /html/front-web.tar.gz- name: scp-files # 上传文件步骤image: appleboy/drone-scpsettings:# 服务器地址, 账号, 密码host: # 不使用secrets, 明文from_secret: '${DRONE_COMMIT_BRANCH}_host'username: rootpassword:from_secret: '${DRONE_COMMIT_BRANCH}_psd'# 需要上传的文件 「需要相对路径, 如果用绝对路径会整条路径打包上传」source: ./front-web.tar.gz# 上传的目录文件夹target: /root/htmlport: 22command_timeout: 2mwhen:branch:- dev- test- name: ssh-commandsimage: appleboy/drone-sshsettings:host:from_secret: '${DRONE_COMMIT_BRANCH}_host'username: rootpassword:# 注意在 drone 页面的 Secrets 添加对应配置from_secret: '${DRONE_COMMIT_BRANCH}_psd'port: 22script:- |#判断环境变量ENV="dev"TAG="3.0"if [ "${DRONE_COMMIT_BRANCH}" = "release" ]; thenENV="pre"TAG="1.0"mv ./front-web.tar.gz root/html/elif [ "${DRONE_COMMIT_BRANCH}" = "test1" ]; thenENV="test"TAG="2.0"fi#拉取镜像并用k8s部署- cd /root/html- tar -zxvf front-web.tar.gz --strip-components 1 -C ./- chmod +x build.sh- sh ./build.sh "web" $ENV $TAGvolumes: # 定义流水线挂载目录,用于共享数据- name: build-htmlhost:path: /root/drone/html # 从宿主机中挂载的目录- name: cachehost:path: /root/drone/src/node_modulestrigger:branch:- dev- test- releaseevent:- push- pull_request
完成后提交到仓库,gitlab会通过上面注册的webhook发送通知给Drone执行构建。
build.sh脚本
#!/bin/bashecho "接受参数:$1,$2,$3"
project=$1
environment=$2
suffix=$3rm front-web.tar.gz
rm yarn.lock
echo "查看当前目录中的文件"
pwd && ls -al
echo "复制配置文件"
cp -f /opt/conf/k8s-${environment}-default.conf default.conf
echo "构建docker镜像,并推送到仓库"
docker build -f Dockerfile -t harborv2.ichub.com/ichub2/micro-web:${suffix} . && docker push harborv2.ichub.com/ichub2/micro-web:${suffix}
echo "重启前端pod并暴露服务"
cd /root/ichub2/${environment}
pwd && ls -al
kubectl delete -f web-${environment}.yaml
kubectl apply -f web-${environment}.yaml
echo "清理镜像文件"
docker rmi harborv2.ichub.com/ichub2/micro-web:${suffix} ##测试环境
本文根据Dron官方文档结合自己公司项目整理而成。
相关文章:
GitLab基于Drone搭建持续集成(CI/CD)
本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。 1. 准备工作 创建OAuth应用 创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。 ps:授权回调 URL 必须与以下格式和路径匹配&…...
用GPB外链打造长期稳定的SEO优势!
很多人在谈外链时,总喜欢纠结是追求数量还是追求质量。其实,最理想的策略是两者兼顾。而在这其中,GPB外链可以说是长期SEO提升的“法宝”。为什么这么说?因为GPB外链不仅保证了高质量,还附带了与网站主题高度相关的原创…...
第11章 内连接与外连接
一、介绍内连接与外连接 (1)内连接与外连接介绍 1、内连接:合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行。 2、外连接:: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(…...
C++ 游戏开发:打造高效、性能优越的游戏世界
在游戏开发领域,C 一直是最受欢迎的编程语言之一。其高效的内存管理和对硬件的底层控制,使得 C 成为开发高性能游戏的首选语言。从大型 3D 游戏引擎到独立游戏的制作,C 在游戏开发中发挥了不可替代的作用。 本文将带你了解 C 在游戏开发中的…...
太速科技-440-基于XCVU440的多核处理器多输入芯片验证板卡
基于XCVU440的多核处理器多输入芯片验证板卡 一、板卡概述 本板卡系我司自主研发的基于6U CPCI处理板,适用于多核处理器多输入芯片验证的应用。芯片采用工业级设计。 基于XCVU440T的多核处理器多输入芯片验证板卡基于6U CPCI架构,是单机中的一个…...
澳鹏通过高质量数据支持 Onfido 优化AI反欺诈功能
“Appen 在 Onfido 的发展中发挥了至关重要的作用,并已成为我们运营的重要组成部分。我们很高兴在 Appen 找到了可靠的合作伙伴。” – Onfido 数据和分析总监 Francois Jehl 简介:利用人工智能和机器学习增强欺诈检测 在当今日益数字化的世界ÿ…...
基于ECS实例搭建Hadoop环境
环境搭建: 【ECS生长万物之开源】基于ECS实例搭建Hadoop环境-阿里云开发者社区 搭建Hadoop环境_云服务器 ECS(ECS)-阿里云帮助中心 Hadoop入门基础(二):Hadoop集群安装与部署详解(超详细教程)࿰…...
关于vue如何监听route和state以及各自对应的实际场景
一、监听route 场景:监听浏览器地址栏分页参数的变化 // 注意 newPageNum和 oldPageNum是 string类型 $route.query.pageNum(newPageNum, oldPageNum) {if (newPageNum ! oldPageNum && newPageNum ! this.pageNum.toString()) {this.handleCurrentChange(p…...
【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整题库
前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…...
Linux(CentOS)设置防火墙开放8080端口,运行jar包,接收请求
1、查看防火墙状态 systemctl status firewalld 防火墙开启状态 2、运行 jar 包,使用8080端口 程序正常启动 3、使用 postman 发送请求,失败 4、检查端口是否开放(需更换到 root 用户) firewall-cmd --zonepublic --query-por…...
对比:生成对抗网络(GANs)和变分自编码器(VAEs)
以下是生成对抗网络(GANs)和变分自编码器(VAEs)的详细介绍、区别、优缺点的对比表: 项目生成对抗网络(GANs)变分自编码器(VAEs)定义GANs 是一种生成模型,通过…...
sqlserver inner join on 条件是包含 怎么写
LEFT JOIN T_Customer tc on CHARINDEX(tbd.CluePhoneNumber,tc.u_phone)>0...
开源 AI 智能名片 S2B2C 商城小程序在微商内容展示中的应用与价值
摘要:本文围绕微商在社群和朋友圈这一“店面”的内容展示展开深入讨论,剖析展示对产品的热爱、产品真实反馈和代理反馈的重要意义,并详细阐述开源 AI 智能名片 S2B2C 商城小程序如何助力微商优化这些内容展示,从而提升微商营销效果…...
Codeforces Round 984 (Div. 3) (A~E)
文章目录 A. Quintomania思路code B. Startup思路code C. Anya and 1100思路code D. I Love 1543思路code E. Reverse the Rivers思路code https://codeforces.com/contest/2036 A. Quintomania 思路 签到题,直接模拟即可 code void solve(){int n;cin >>…...
pytorch3d报错:RuntimeError: Not compiled with GPU support.
目录 解决方法:编译之前:加上指令: 解决方法:pytorch3d 安装命令(ubuntu),成功!!! 测试代码: FORCE_CUDA1 works for me. Thanks! args (point…...
软考中级-软件设计师 数据结构与算法
文章目录 考点数据结构基础线性结构非线性结构 常见算法排序算法查找算法递归算法分治算法动态规划贪心算法 复杂度分析 考点 在软考中,数据结构与算法的考点主要集中在以下方面: 基本概念:掌握各类数据结构的定义、特点和应用场景。常用算…...
关于CSS表达使中使用的 max() 函数
定义: max() 函数:它会返回括号中给定的值中的最大值。 比如,width: max(250px, 25vw);-------它比较 250px 和 25vw,然后选择其中的较大值作为元素的宽度。 让我们逐步解析这个表达式: 250px:表示一个…...
51单片机教程(八)- 数码管的静态显示
1、项目分析 使用数码管显示指定的字符、数字和符号。 2、技术准备 1、显示器及其接口 单片机系统中常用的显示器有: 发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显…...
案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索
河北省某检察院是当地重要的法律监督机构,肩负着维护法律尊严和社会公平正义的重要职责。该机构依法独立行使检察权,负责对犯罪行为提起公诉,并监督整个诉讼过程,同时积极参与社会治理,保护公民权益,推动法…...
clickhouse自增id的处理
msyql 中创建数据表的时候可以通过AUTO_INCREMENT 来实现,clickhouse中可以通过其他方式来处理 一、 默认值 创建表时可以实用默认值,该列值可以自动递增。如下所示 CREATE TABLE my_table ( id UInt32 DEFAULT IDENTITY(AUTO_INCREMENT), name Strin…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
