基于 Drone CI 实现前端自动化打包并集成 Spug 自动发布流程

前言:代码自动化部署目前使用的是Spug开源运维平台,通过docker直接部署该平台后,在前端自动化打包(npm run build)会遇见Node的版本问题,因为Spug容器使用的是Centos7,所以Node版本只支持V16,V18以上版本不支持。所以考虑使用使用Drone CI来完成前端自动化打包(npm run build)再触发Spug的Webhook来完成自动化代码发布。

一、部署 Drone CI(Docker 方式)

我们需要创建一个文件夹,用于初始Drone CI的启动文件。

1、准备 .env 配置文件

文件路径,例如使用 /www/dk_project/drone_ci/.env

# Gitea地址(容器访问得到即可)
DRONE_GITEA_SERVER=http://127.0.0.1:42000# Gitea-OAuth2 应用程序参数
DRONE_GITEA_CLIENT_ID=xxx
DRONE_GITEA_CLIENT_SECRET=xxx# Drone server 配置
DRONE_SERVER_HOST=127.0.0.1:12009
DRONE_SERVER_PROTO=http# 第一个用户初始化设置(根据 Gitea 用户名)
DRONE_USER_CREATE=username:admin,admin:true# Runner 需要这些变量
DRONE_RPC_PROTO=http
DRONE_RPC_HOST=drone-server
# Drone 用于认证 Server <-> Runner 的 secret,自定义即可,必须一致
DRONE_RPC_SECRET=123456

1.2、Gitea-OAuth2 应用程序参数

需要在Gitea 后台创建 OAuth2 应用

1.2.1、步骤
  • 登录 Gitea 网站(管理员账号)

  • 点击右上角头像 → 管理后台

  • 左侧菜单选择集成 → 应用

  • 填写信息:

字段示例
应用名称Drone CI
重定向 URIhttp://your-drone-server.com/login
如:http://127.0.0.1:12009/login
  • 点击 创建新应用

提交后会获得两个字段:

Client ID → 填入 DRONE_GITEA_CLIENT_ID

Client Secret → 填入 DRONE_GITEA_CLIENT_SECRET

2、编写 docker-compose.yml

文件路径,使用 /www/dk_project/drone_ci/docker-compose.yml

还需要再创建一个文件夹 /www/dk_project/dk_compose/drone/data作为数据映射文件

version: '3'services:drone-server:image: drone/drone:2ports:- 12009:80volumes:- /www/dk_project/dk_compose/drone/data:/dataenv_file:- .envrestart: alwaysdrone-runner:image: drone/drone-runner-docker:1volumes:- /var/run/docker.sock:/var/run/docker.sockenv_file:- .envrestart: always

3、启动 Drone

docker-compose up -d

4、访问地址

http://127.0.0.1:12009

首次登录会跳转到 Gitea 登录页(使用你配置的 DRONE_USER_CREATE 中的用户)

点击CONTINUE后会进行Gitea授权

应用授权后填写你的信息即可

二、项目配置(前端项目为例) 

1、创建 .drone.yml 文件

放到项目根目录,记得.drone.yml 文件需要发布到test和master分支。

kind: pipeline
type: docker
name: build-deploytrigger:event:- push- custombranch:- master- teststeps:- name: install & buildimage: node:23.9.0volumes:- name: build-outputpath: /runner/buildscommands:- corepack enable- corepack prepare pnpm@8.15.5 --activate- pnpm install- mkdir -p /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}- |case "${DRONE_BRANCH}" intest)pnpm run build:test;;master)pnpm run build:prod;;*)echo "❌ 未配置此分支的构建规则: ${DRONE_BRANCH}"exit 1;;esac- rm -rf /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/*- cp -r dist/* /runner/builds/${DRONE_REPO_NAME}/${DRONE_BRANCH}/- name: deploy to spugimage: curlimages/curlwhen:status:- successbranch:- test- masterenvironment:SPUG_DEPLOY_URL:from_secret: spug_deploy_lingji_officel_web_urlSPUG_DEPLOY_TOKEN:from_secret: spug_deploy_tokencommands:- |echo "🚀 部署到 Spug: 分支 ${DRONE_BRANCH}"curl -X POST "$SPUG_DEPLOY_URL?name=${DRONE_BRANCH}&token=$SPUG_DEPLOY_TOKEN" \-H "Content-Type: application/json" \-d '{"ref": "refs/heads/'"${DRONE_BRANCH}"'","before": "'"${DRONE_COMMIT_BEFORE}"'","after": "'"${DRONE_COMMIT_SHA}"'","commits": [{"message": "发布'"${DRONE_BRANCH}:${DRONE_COMMIT_SHA}"'"}]}'- name: notify feishu on successimage: curlimages/curlwhen:status:- successenvironment:FEISHU_WEBHOOK:from_secret: feishu_webhook_urlcommands:- |curl -X POST "$FEISHU_WEBHOOK" \-H "Content-Type: application/json" \-d '{"msg_type": "text","content": {"text": "✅ Drone-CI 执行成功 🎉\n项目: '${DRONE_REPO_NAME}'\n分支: '${DRONE_BRANCH}'\n提交: '${DRONE_COMMIT_SHA:0:8}'"}}'- name: notify feishu on failureimage: curlimages/curlwhen:status:- failureenvironment:FEISHU_WEBHOOK:from_secret: feishu_webhook_urlcommands:- |curl -X POST "$FEISHU_WEBHOOK" \-H "Content-Type: application/json" \-d '{"msg_type": "text","content": {"text": "❌ Drone-CI 执行失败 ❗️\n项目: '${DRONE_REPO_NAME}'\n分支: '${DRONE_BRANCH}'\n提交: '${DRONE_COMMIT_SHA:0:8}'"}}'volumes:- name: build-outputhost:path: /www/dk_project/dk_compose/spug/data/repos/build/drone-runner/builds

 1.1、注意点

1.1.1、environment参数

environment参数里,类似feishu_webhook_url这些都是在drone上设置的,位置在:Seetings里的Secrets(Organization),

这里在设置一个Secrets的时候,需要勾选Allow Pull Requests才会被全部项目使用

三、Drone Web UI 中启用项目

登录 Drone → 找到你的项目 → 点「+ Activate」启用构建。

Drone 会自动给 Gitea 注册 webhook。

并且在Settings启用三个配置。

我们回到Gitea查看当前的webhook有自动生成。该webhook为drone的地址。

 我们这里对webhook设置只监听test个master的推送事件

 四、创建CI

我们可以手动创建CI来验证,在项目的NEW BUILD按钮,点击一个新的CI

比如这里我们选择test

跑完后的效果如下:

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

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

相关文章

【基础】Golang语言开发环境搭建(Linux主机)

目录 1. 下载并安装Go语言2. 配置环境变量3. 验证安装4. 配置Go模块5. 安装常用开发工具6. 配置IDE&#xff08;可选&#xff09;7. 第一个Go程序 在Linux主机上搭建Golang开发环境&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 下载并安装Go语言 首先从官网下载Go…

MySQL安全加固:使用mysql_secure_installation

在安装MySQL后&#xff0c;为了确保服务器的安全性&#xff0c;建议使用mysql_secure_installation工具对MySQL进行安全加固。这个工具可以帮助我们完成一些关键的安全配置&#xff0c;包括设置强密码、移除匿名用户、限制root用户的远程登录以及清理默认的测试数据库等。以下是…

设计模式之中介者模式 (Mediator Pattern) -聊天室-控制室

中介者模式用于减少多个对象之间的直接通信&#xff0c;而是通过一个中介对象来协调它们之间的交互。下面我用一个聊天室的例子来演示这个模式。 举个栗子&#xff1a;聊天室系统 在这个系统中&#xff0c;用户不直接相互发送消息&#xff0c;而是通过聊天室&#xff08;中介者…

SpringSecurity01

目录 一、权限控制 二、相关框架 1、shiro 2、springsecurity 三、springsecurity使用流程 1、搭建环境实现默认用户名和密码登录 2、使用数据库表中定义好的用户名和密码访问实现等值密码匹配 1&#xff09;sql文件 2)搭建jdbc或者mybatis或者mybatis-plus环境 3&am…

解决git clone报错:fatal unable to access xxx. Could not resolve host github.com

作者&#xff1a;唐叔在学习 专栏&#xff1a;问题百宝箱 文章目录 问题描述问题诊断网络连通性测试 解决方案1. 获取GitHub最新IP地址2. 修改系统hosts文件 验证解决方案常见问题解答总结 问题描述 当使用git clone命令克隆GitHub仓库时&#xff0c;可能会遇到如下错误&#…

魔术方法__call__

__call__ 是一个特殊方法&#xff08;也称为魔术方法&#xff09;&#xff0c;用于使一个类的实例能够像函数一样被调用。当定义了这个方法后&#xff0c;实例对象可以后接括号&#xff08;即 ()&#xff09;来触发调用&#xff0c;这会让实例表现得像函数一样。 ​使实例可调…

PHP中的异常处理与错误日志记录

在PHP编程实践中&#xff0c;异常处理是一项至关重要的技能&#xff0c;它能够帮助开发者识别和响应程序执行过程中发生的非预期事件。与此同时&#xff0c;错误日志记录是确保应用程序可靠性和稳定性的关键组成部分。本文将详细介绍如何在PHP中实现这两个方面的技术。 首先&a…

JS去除空格(数组内字符串)

1.JS中去除空格 去除这个数组中每个对象内部参数&#xff08;也就是属性值&#xff09;的空格&#xff0c;可以通过遍历数组&#xff0c;再遍历每个对象的属性&#xff0c;使用 trim() 方法来去除字符串首尾的空格。以下是具体实现代码&#xff1a; let data [{ designHours:…

【Spring篇01】:Bean的线程安全问题总结

文章目录 1. 核心问题&#xff1a;Spring 框架中的 Bean 是线程安全的吗&#xff1f;2. 最佳实践与解决方案禁止方案&#xff1a;滥用prototype作用域推荐方案&#xff08;按优先级排序&#xff09; 3. 生产环境中的典型案例Case 1&#xff1a;订单服务统计Case 2&#xff1a;用…

本地项目上传git

将您本地的项目代码上传到一个私有的、别人看不见的 GitHub 仓库&#xff0c;是进行云端协作&#xff08;如使用 Google Colab&#xff09;、版本控制和代码备份的最佳实践。这是一个非常重要的技能。 整个过程可以分为三个部分&#xff1a; 准备工作&#xff1a;在您的电脑上…

【.NET Framework 窗体应用程序项目结构介绍】

在使用 Visual Studio (VS) 开发 .NET Framework 窗体应用程序&#xff08;Windows Forms App&#xff09; 时&#xff0c;项目结构通常包含以下核心文件夹和文件。以下是详细介绍&#xff1a; 1. 项目根目录下的主要文件 (1) .csproj 文件 作用&#xff1a;C# 项目文件&…

【SpringAI】4.多模态提问

SpringAI多模态提问 概述 SpringAI支持多模态输入&#xff0c;允许AI模型同时处理文本和图像内容。这对于需要视觉理解的AI应用场景非常有用&#xff0c;如图像描述、视觉问答、图像分析等。 核心概念 1. Media类 SpringAI使用Media类来表示多模态内容&#xff0c;支持图…

自动化提示工程:未来AI优化的关键突破

自动化提示工程:未来AI优化的关键突破 自动化提示工程能够自动化或半自动化地生成或优化提示词,以探索大规模的提示词组合,并通过 自动优化技术提升提示词生成的稳定性。 依据自动化提示工程实现形式在逻辑推理和效能导向 两个维度的取舍上,将其分为基于思维链的自动化提示工…

多模态大语言模型arxiv论文略读(148)

A Comprehensive Survey and Guide to Multimodal Large Language Models in Vision-Language Tasks ➡️ 论文标题&#xff1a;A Comprehensive Survey and Guide to Multimodal Large Language Models in Vision-Language Tasks ➡️ 论文作者&#xff1a;Chia Xin Liang, P…

关于.net core开发的实体所有注解详解

以下是对 .NET Core 开发中实体类&#xff08;用于数据模型&#xff09;和 Web API 控制器/方法&#xff08;用于定义接口&#xff09;常用注解属性&#xff08;Attributes&#xff09;的详细说明与示例&#xff0c;涵盖数据验证、API 行为控制、序列化、Swagger/OpenAPI 文档生…

【安全工具】SQLMap 使用详解:从基础到高级技巧

目录 简介 一、安装与基础配置 1. 安装方法 2. 基本语法 二、基础扫描技术 1. 简单检测 2. 指定参数扫描 3. 批量扫描 三、信息收集 1. 获取数据库信息 2. 获取当前数据库 3. 获取数据库用户 4. 获取数据库版本 四、数据提取技术 1. 列出所有表 2. 提取表数据 …

Redis大Key拆分实战指南:从问题定位到落地优化

引言 最近在项目里遇到一个棘手问题&#xff1a;生产环境的Redis突然变“卡”了&#xff01;查询延迟从几毫秒飙升到几百毫秒&#xff0c;监控面板显示某个节点CPU使用率飙到90%。排查半天才发现&#xff0c;原来是某个用户订单的Hash Key太大了——单Key存了100多万个订单字段…

RabbitMQ简单消息发送

RabbitMQ简单消息发送 简单代码实现RabbitMQ消息发送 需要的依赖 <!--rabbitmq--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>x.x.x</version>&l…

【阅读笔记】基于双边滤波改进的空域滤波算法

一、双边滤波空域滤波算法 双边滤波是一种典型的非线性滤波算法。基于高斯滤波&#xff0c;双边滤波利用强度的变化来保存边缘信息&#xff0c;解决了边缘模糊在视觉观感上认为重要信息丢失的问题。双边滤波的滤波效果主要取决于两个参数&#xff1a;两个像素的空间邻近性和灰…

华为交换机堆叠与集群技术深度解析附带脚本

一、引言 在企业园区网、数据中心等网络场景中&#xff0c;为了提升网络的可靠性、扩展性和管理效率&#xff0c;华为交换机提供了堆叠&#xff08;Stack&#xff09;和集群&#xff08;CSS&#xff0c;Cluster Switch System &#xff09;技术。这两种技术能够将多台物理交换…