如何搭建 Vue.js 开源项目的 CI/CD 流水线
大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。
图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:极星会首批签约作者
文章目录
- 摘要
- 引言
- 选择合适的 CI/CD 工具
- GitHub Actions 实现 CI/CD 流水线
- GitHub Actions 配置文件
- 自动化测试和构建
- 代码示例
- Jenkins 实现 CI/CD 流水线
- Jenkins 配置步骤
- 代码示例
- 流水线运行和监控
- QA环节
- 总结
- 参考资料
摘要
本文旨在探讨如何为开源的 Vue.js 项目构建 CI/CD 流水线,以实现自动化的构建、测试和发布流程。通过使用 GitHub Actions 和 Jenkins 等工具,可以显著提高开发效率,减少手动操作带来的错误。文章将详细介绍流水线的设计和实现,并提供可运行的示例代码模块。
引言
随着前端技术的不断发展,Vue.js 凭借其简洁、灵活和高效的特性,已经成为众多开发者心中的首选。然而,对于开源项目来说,缺乏自动化的构建和发布流程会导致开发效率低下,且手动操作容易出错。因此,搭建 CI/CD 流水线成为提高项目质量和开发效率的关键。
选择合适的 CI/CD 工具
-
GitHub Actions
- GitHub 提供的 CI/CD 服务,支持自定义工作流程。
- 与 GitHub 仓库无缝集成,方便管理。
-
Jenkins
- 一个强大的持续集成/持续部署(CI/CD)工具,支持多种语言和平台。
- 需要单独安装和配置,但功能强大且灵活。
GitHub Actions 实现 CI/CD 流水线
GitHub Actions 配置文件
在 Vue.js 项目的根目录下创建一个名为 .github/workflows/ci-cd.yml
的文件,这是 GitHub Actions 的配置文件。
name: CI/CD Pipelineon:push:branches:- mainpull_request:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Set up Node.jsuses: actions/setup-node@v2with:node-version: '14'- name: Install dependenciesrun: npm install- name: Build projectrun: npm run build- name: Run testsrun: npm run test- name: Deploy to server (optional)# 这里可以添加部署到服务器的步骤,例如使用 SSH 部署工具# 需要先配置服务器的 SSH 密钥等# run: scp -r dist/* user@yourserver:/path/to/deploy/directory
自动化测试和构建
在 package.json
文件中配置 scripts
,以便在 CI/CD 流水线中运行测试和构建命令。
{"scripts": {"build": "vue-cli-service build","test": "jest"}
}
代码示例
- 示例项目结构
my-vue-project/
├── .github/
│ └── workflows/
│ └── ci-cd.yml
├── dist/
├── node_modules/
├── public/
├── src/
├── package.json
└── vue.config.js
- 示例
vue.config.js
配置
module.exports = {publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/'
}
Jenkins 实现 CI/CD 流水线
Jenkins 配置步骤
- 安装 Jenkins:在服务器上安装 Jenkins,并配置好访问权限。
- 创建项目:在 Jenkins 中创建一个新项目,选择适合的项目类型(如 Maven、Gradle 等)。
- 配置源码管理:在项目配置中,设置源码管理(如 Git),以便 Jenkins 可以拉取最新的代码。
- 配置构建触发器:在构建触发器中,选择适合的触发方式(如定期轮询、代码提交等),以便 Jenkins 在适当的时机自动触发构建。
- 配置构建步骤:在构建步骤中,设置构建过程,包括打包、测试等。可以使用 Jenkins 提供的插件来简化构建过程。
- 配置发布步骤:在发布步骤中,设置发布过程,包括将构建产物部署到目标环境、执行必要的脚本等。可以使用 Jenkins 的插件(如 Publish Over SSH)来简化发布过程。
代码示例
- 示例 Jenkinsfile
pipeline {agent anystages {stage('Checkout') {steps {git 'https://your-git-repo-url.git'}}stage('Build') {steps {script {sh 'npm install'sh 'npm run build'}}}stage('Test') {steps {script {sh 'npm run test'}}}stage('Deploy') {steps {script {// 部署步骤,例如使用 SSH 部署到服务器// sh 'scp -r dist/* user@yourserver:/path/to/deploy/directory'}}}}
}
流水线运行和监控
- 在 GitHub Actions 中,可以在仓库的 “Actions” 选项卡中查看流水线的运行情况和日志。
- 在 Jenkins 中,可以在仪表盘中查看流水线的运行状态和日志,方便进行问题排查和监控。
QA环节
Q1:GitHub Actions 和 Jenkins 哪个更适合 Vue.js 项目?
A1:这取决于项目的具体需求和团队的偏好。GitHub Actions 与 GitHub 仓库无缝集成,配置简单且方便管理。而 Jenkins 功能强大且灵活,但需要单独安装和配置。
Q2:如何在 CI/CD 流水线中处理不同环境的配置?
A2:可以通过环境变量或配置文件来区分不同环境的配置。例如,在 .env
文件中定义不同环境的变量,然后在构建时根据环境变量来设置相应的配置。
总结
本文详细介绍了如何利用 GitHub Actions 和 Jenkins 为 Vue.js 开源项目设计 CI/CD 流水线,实现了自动化的构建、测试和发布流程。通过搭建 CI/CD 流水线,可以显著提高开发效率,减少手动操作带来的错误,从而提高项目的质量和稳定性。
随着前端技术的不断发展和开源社区的壮大,Vue.js 项目将会面临更多的挑战和机遇。未来,可以进一步优化 CI/CD 流水线的配置和流程,引入更多的自动化工具和技术,如自动化测试框架、性能监控工具等,以提升项目的开发效率和质量。
参考资料
- Vue.js 官方文档
- GitHub Actions 官方文档
- Jenkins 官方文档
相关文章:

如何搭建 Vue.js 开源项目的 CI/CD 流水线
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

单通道串口服务器(三格电子)
一、产品介绍 1.1 功能简介 SG-TCP232-110 是一款用来进行串口数据和网口数据转换的设备。解决普通 串口设备在 Internet 上的联网问题。 设备的串口部分提供一个 232 接口和一个 485 接口,两个接口内部连接,同 时只能使用一个口工作。 设 备 的网 口…...

【Excel/WPS】根据平均值,生成两列/多列指定范围的随机数/随机凑出两列数据
原理就是通过随机生成函数和平均值函数。 适用场景:在总体打分后,需要在小项中随机生成小分数 第一列:固定的平均值A2第二列: RANDBETWEEN(A2-10,A210)第三列:根据第二列用平均值函数算除 A2*2-B2这是随机值1的公式&am…...

使用网页版Jupyter Notebook和VScode打开.ipynb文件
目录 正文 1、网页版Jupyter Notebook查看 2、VScode查看 因为总是忘记查看文件的网址,收藏了但分类众多每次都找不到……当个记录吧(/捂脸哭)! 正文 此处以gitub中的某个仓库为例: https://github.com/INM-6/mu…...

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据
文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据,页面卡死,如何优化??这里使用 分页 虚拟列表(vue-virtual-scroll-list),去模拟一个下拉的内容…...
CDA数据分析师一级经典错题知识点总结(5)
1、数值型缺失值用中位数补充,分类数据用众数补充。 2、偏态系数>1就是高度偏,0.5到1是中度。 3、分布和检验 在 t检验之前进行 F检验的目的是确保 t检验的方差齐性假设成立。如果 F检验结果显示方差不相等,则需要切换到调整后的 t 检验…...
服务器、电脑和移动手机操作系统
一、服务器操作系统 1、Windows Server 开发商是微软公司。友好的用户界面、与微软生态系统的高度集成、提供了广泛的企业级功能(如Active Directory、DNS、DHCP服务等)。适合需要大量运行Microsoft应用和服务的企业环境,如SQL Server等。经…...

深入解析 Flink 与 Spark 的性能差异
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...

如何在 Linux、MacOS 以及 Windows 中打开控制面板
控制面板不仅仅是一系列图标和菜单的集合;它是通往优化个人计算体验的大门。通过它,用户可以轻松调整从外观到性能的各种参数,确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备,还是简单地改变桌…...
微信小程序中 隐藏scroll-view 滚动条 网页中隐藏滚动条
在微信小程序中隐藏scroll-view的滚动条可以通过以下几种方法实现: 方法一:使用CSS隐藏滚动条 在小程序的样式文件中(如app.wxss或页面的.wxss文件),添加以下CSS代码来隐藏滚动条: scroll-view ::-webkit…...

Java 实现 Elasticsearch 查询当前索引全部数据
Java 实现 Elasticsearch 查询当前索引全部数据 需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后 需求背景 通常情况下,Elasticsearch 为了提高查询效率,对于不指定分页查询条数的查询语句,默认会返回10条数据。那么这就会有…...

android刷机
android ota和img包下载地址: https://developers.google.com/android/images?hlzh-cn android启动过程 线刷 格式:ota格式 模式:recovery 优点:方便、简单,刷机方法通用,不会破坏手机底层数据࿰…...

【25考研】西南交通大学计算机复试重点及经验分享!
一、复试内容 上机考试:考试题型为编程上机考试,使用 C 语言,考试时长包括 15 分钟模拟考试和 120 分钟正式考试,考试内容涵盖顺序结构、选择结构、循环结构、数组、指针、字符串处理、函数、递归、结构体、动态存储、链表等知识点…...
OpenCV相机标定与3D重建(49)将视差图(disparity map)重投影到三维空间中函数reprojectImageTo3D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将视差图像重投影到3D空间。 cv::reprojectImageTo3D 是 OpenCV 库中的一个函数,用于将视差图(disparity map)…...

学习HTTP Range
HTTP Range 请求 一种通过指定文件字节范围加载部分数据的技术,广泛用于断点续传、流媒体播放、分布式文件系统的数据分片加载等场景。 请求格式-在请求头中使用 Range 字段指定所需的字节范围 Range: bytes0-1023// bytes0-1023:表示请求文件的第 0 …...

大语言模型训练的数据集从哪里来?
继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业,再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText,该数据集大概40GB,由OpenAI创建,主要内…...
Webpack和Vite的区别
一、构建速度方面 webpack默认是将所有模块都统一打包成一个js文件,每次修改都会重写构建整个项目,自上而下串行执行,所以会随着项目规模的增大,导致其构建打包速度会越来越慢 vite只会对修改过的模块进行重构,构建速…...

【再谈设计模式】模板方法模式 - 算法骨架的构建者
一、引言 在软件工程、软件开发过程中,我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤,但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式(Template Method Design Pattern)就为解决这类问题提供了…...

Bytebase 3.1.1 - 可定制的快捷访问首页
🚀 新功能 可定制的快捷访问首页。 支持查询 Redis 集群中所有节点。 赋予项目角色时,过期时间可以定义精确到秒级的时间点。 🔔 重大变更 移除 Database 消息里的实例角色信息。调用 GetInstance 或 ListInstanceRoles 以获取实例角色信息…...

Java阶段四04
第4章-第4节 一、知识点 CSRF、token、JWT 二、目标 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验证和JWT验证的区别 学会使用JWT 三、内容分析 重点 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...