基于 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
英文地址,請注明出處:http://en.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;技術。這兩種技術能夠將多臺物理交換…