【前端】从手动部署到自动部署:前端项目进化之路

从手动部署到自动部署:前端项目进化之路

在前端开发的领域内,部署是一个不可忽视的环节。随着项目复杂度的增加和线上更新频率的提升,手动部署逐渐暴露出它的弊端。本文将带你从手动部署过渡到自动部署,完成前端项目进化的重要一步。
在这里插入图片描述

一、手动部署

1. 初始阶段:手动部署的简述

在早期阶段,前端项目往往并不复杂,手动部署是直接且可行的方法。部署步骤如下:

  1. 编写代码。
  2. 测试并确认无误。
  3. 打包项目,例如,使用Webpack打包命令:
    npm run build
    
  4. 将打包后的文件通过FTP或其他方式上传至服务器。
  5. 在服务器上配置Nginx或Apache来提供静态文件服务。

2. 手动部署的弊端

手动部署虽然简单直接,但随着项目的复杂和团队的扩大,它的弊端也显现出来:

  • 容易出现人为错误,例如文件漏传等。
  • 更新效率低。
  • 无法快速回滚到之前的版本。
  • 部署过程缺乏一致性,容易导致环境不一致问题。

理解了你的反馈。下面我将更详细地介绍自动部署的工作原理。

二、迈向自动化:自动部署的工作原理

自动部署(自动化部署)是现代开发中的一项重要技术,它通过CI/CD(持续集成和持续部署)流水线,将代码自动发布到生产环境,减少人为干预,显著提高了部署的可靠性和效率。

1. 什么是CI/CD?

持续集成(Continuous Integration - CI)

持续集成是一种软件开发实践,开发者常常、多次地将代码集成到共享代码库中。每次集成后,都会自动进行构建和测试,以尽早发现错误,提高软件质量和开发效率。

持续部署(Continuous Deployment - CD)

持续部署是在持续集成的基础上,将代码自动部署到生产环境。每次代码变更,经过自动化测试,通过后会立即部署到生产环境,以确保最新的代码随时能够提供给用户。

2. 自动部署的核心组件

自动部署系统通常由以下几个核心组件构成:

源码管理系统(SCM)

例如GitHub、GitLab等,用于源代码的管理。开发者将代码推送到这个系统后,触发自动部署流程。

CI/CD 工具

如Jenkins、GitHub Actions、GitLab CI等。这些工具帮助我们自动管理从代码提交到生产部署的各个环节。

构建工具

如Webpack、Parcel,它们将源代码打包成可供部署的静态文件。

部署目标

例如Vercel、Netlify、AWS S3等,用于实际托管和运行前端应用的服务器或服务。

3. 自动部署的工作流程

步骤1:代码提交

开发人员将最新的代码提交到源码管理系统。例如,在Git工作流中,代码通常推送到主分支或特定的功能分支。

步骤2:触发构建

源码管理系统检测到代码变更后,会通知CI/CD工具。CI/CD工具拉取最新的代码,并开始构建流程。

步骤3:自动化测试

在构建过程中,CI/CD工具会运行预定义的自动化测试(单元测试、集成测试等)。如果测试失败,构建过程会中止,并通知相关人员进行修复。

步骤4:打包

测试通过后,CI/CD工具使用构建工具(如Webpack)将项目打包生成静态文件。

步骤5:部署

打包完成后,CI/CD工具会将生成的静态文件上传到指定的部署目标。此步骤可以包括上传到托管服务器、配置CDN、更新缓存等操作。

步骤6:验证和监控

在完成部署后,CI/CD工具可以执行额外的验证步骤,如健康检查、性能测试等。监控系统会持续监控应用的运行状态,以确保没有部署过程中产生的问题。

4. 自动部署的优势

提升效率

自动部署能够实现代码变更后的即时发布,大幅缩短了上线时间,提高了开发和运维效率。

降低错误率

通过自动化测试和标准化部署流程,自动部署减少了人工操作带来的失误,保证了部署的一致性和可靠性。

快速回滚

一旦发现问题,自动部署系统能够快速回滚到之前的稳定版本,减少故障对业务的影响。

增强协作

自动部署使得团队成员可以更紧密地协作,每个人都能迅速看到他们对项目的贡献如何影响整体系统。

通过CI/CD工具和自动化部署,我们能够持续集成和部署代码,从而显著提升开发效率和产品质量。这不仅是一种技术升级,更是开发流程的一次深刻变革。下面我们详细介绍如何在前端项目中具体实现这一过程。

三、实现自动部署的详细步骤

以一个使用GitHub、Jenkins、和Vercel的前端项目为例,详细介绍自动部署的流程。

1. 准备工作

  • 一个GitHub仓库
  • 服务器(需要安装Jenkins)
  • Vercel账号

2. 配置GitHub仓库

确保你的项目已上传至GitHub,且仓库设置正确。

3. 在服务器上安装Jenkins

  1. 更新软件包列表并安装Jenkins:

    sudo apt update
    sudo apt install openjdk-11-jdk
    wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt update
    sudo apt install jenkins
    
  2. 启动Jenkins并配置防火墙:

    sudo systemctl start jenkins
    sudo ufw allow 8080
    
  3. 通过浏览器访问Jenkins,初次访问需要输入管理员密码(通过下面命令获取):

    sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    
  4. 按照页面提示完成初始设置和插件安装。

4. 配置Jenkins任务

  1. 新建一个Freestyle项目。
  2. 在“源码管理”选项中选择“Git”,填入你的GitHub仓库地址。
  3. 在“构建触发”选项中选择合适的触发条件,例如“GitHub hook trigger for GITScm polling”。
  4. 在“构建”选项卡中,添加一个Execute Shell构建步骤,填入以下打包命令:
    npm install
    npm run build
    
  5. 选择“构建后操作”中的“Send build artifacts over SSH”,配置你的服务器信息,将打包后的文件上传到服务器。

5. 配置Vercel进行自动化部署

  1. 登录Vercel,创建一个新项目并连接到GitHub仓库。

  2. 配置Vercel项目,指定打包命令和输出目录。例如:

    • Build Command: npm run build
    • Output Directory: build
  3. 保存配置后,每当你将代码推送到GitHub仓库时,Vercel会自动执行打包和部署。

6. 集成持续集成工具(可选)

除了Jenkins,还可以使用其他CI工具如GitHub Actions、GitLab CI等来实现持续集成。配置流程类似,主要是通过配置文件指定构建和部署步骤。

例如,GitHub Actions配置文件(.github/workflows/deploy.yml)示例:

name: Deploy to Vercel

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
      
    - name: Install dependencies
      run: npm install

    - name: Build project
      run: npm run build

    - name: Deploy to Vercel
      uses: amondnet/vercel-action@v20
      with:
        vercel-token: ${{ secrets.VERCEL_TOKEN }}
        vercel-args: '--prod'
        working-dir: ./build
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

四、总结

从手动部署到自动部署的过渡,不仅是技术的提升,更是效率和稳定性的保障。通过CI/CD工具,前端团队可以极大地降低部署风险、提高响应速度,真正实现敏捷开发与快速迭代。

希望通过本文的介绍,你能够顺利将你的前端项目从手动部署迁移到自动部署,迎接更加高效、稳定的开发体验。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Round-Robin 调度逻辑算法

Round-Robin 调度逻辑算法 1 Intro1.1 固定优先级1.2 Round-Robin算法 之前上学还是工作,都接触过调度算法:Round-Robin和weight-Round Robin算法,但只知道它的功能和目的是什么,没有具体了解如何实现的; 现在是工作上…

移动云服务器选购指南(图文教程详解)

目录 一、前言 二、基本概念 2.1 定义 2.2 部署形式 2.3 用处 三、主流平台 四、主流产品推荐 4.1 云电脑 4.2 云主机ECS 4.3 弹性公网 IP 五、选购指南 5.1 明确场景 5.2 明确需求 5.3 明确身份 新用户 老用户 5.4 明确时间 5.5 明确教程 六、总结 一、前言…

【多态】(超级详细!)

【多态】(超级详细!) 前言一、 多态的概念二、重写1. 方法重写的规则2. 重写和重载的区别 三、多态实现的条件四、 向上转型五、动态绑定 前言 面向对象的三大特征:封装性、继承性、多态性。 extends继承或者implements实现&…

短视频商城全套源码:开启电商新纪元

随着数字媒体的快速发展,短视频平台已经成为人们获取信息、娱乐和社交的重要渠道。在这样一个大背景下,短视频商城的兴起,无疑为电商行业带来了新的机遇和挑战。本文将探讨短视频商城全套源码的重要性,以及它如何助力商家和开发者…

详解Spring MVC

目录 1.什么是Spring Web MVC MVC定义 2.学习Spring MVC 建立连接 RequestMapping 注解介绍及使用 获取单个参数 获取多个参数 获取普通对象 获取JSON对象 获取基础URL参数 获取上传文件 获取Header 获取Cookie 获取Session 总结 1.什么是Spring Web MVC 官⽅对于…

生成式AI模型大PK——GPT-4、Claude 2.1和Claude 3.0 Opus

RAG(检索增强生成)系统的新评估似乎每天都在发布,其中许多都集中在有关框架的检索阶段。然而,生成方面——模型如何合成和表达这些检索到的信息,在实践中可能具有同等甚至更大的意义。许多实际应用中的案例证明,系统不仅仅要求从上…

《征服数据结构》目录

我们知道要想学好算法,必须熟练掌握数据结构,数据结构常见的有 8 大类,分别是数组,链表,队列,栈,散列表,树,堆,图。但如果细分的话就比较多了,比如…

华为WLAN实验继续-2,多个AP如何部署

----------------------------------------如果添加新的AP,如何实现多AP的服务----------- 新增加一个AP2启动之后发现无法获得IP地址 在AP2上查看其MAC地址,并与将其加入到AC中去 打开AC,将AP2的MAC加入到AC中 sys Enter system view, re…

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测 请问如果说到电纸书,你的认知还只是Kindle吗?然而遗憾的是,Kindle亦是过去,智能才是未来。 哈喽小伙伴们好,我是Stark-C~&#x…

【机器学习】【深度学习】批量归一化(Batch Normalization)

概念简介 归一化指的是将数据缩放到一个固定范围内,通常是 [0, 1],而标准化是使得数据符合标准正态分布。归一化的作用是使不同特征具有相同的尺度,从而使模型训练更加稳定和快速,尤其是对于使用梯度下降法的算法。而标准化的作用…

Python自动化办公Excel数据处理实战指南

目录 一、引言 二、需求分析 三、技术选型 四、实战操作 数据读取 数据清洗 数据分析 数据输出 五、学习资源推荐: 六、结语 一、引言 在现代办公环境中,Excel数据处理是一项不可或缺的技能。然而,当数据量庞大、处理流程复杂时&a…

Nocobase快速上手 -第一个collection

本文记录Nocobase中如何创建collection,以及如何将collection展示到页面中,并且配置CRUD相应的操作. Collection 在NocoBase中,collection(集合)是用来组织和存储各种数据的容器,如订单、产品、用户、评论…

【算法】位运算算法——判断字符是否唯一

题解:判断字符是否唯一(位运算算法) 目录 1.题目2.题解3.位图参考代码4.细节5.总结 1.题目 题目链接:LINK 2.题解 题解有两种方法, 一是做一个哈希数组,去查重; 二是直接用一个变量每一位来对应表示是否有这个字母…

《QT实用小工具·六十七》QTabWidget实现的炫酷标签工具栏

1、概述 源码放在文章末尾 该项目基于QTabWidget和QTabBar实现了灵活的标签工具栏,主要包含如下功能: 1、标签栏可以收起,可以展开 2、可以在标签栏中添加新的标签界面 3、可以从标签工具栏中把界面拖出来,也可以拖回去 4、关闭拖…

【音视频基础概念】颜色与图像

文章目录 前言一、三原色不同三原色的概念三原色的作用 二、颜色空间颜色空间是什么颜色空间的作用常见颜色空间示例灰度图像是什么灰度图像的作用灰度图像的技术细节示例 总结 前言 在当今数字媒体时代,音视频技术在我们的日常生活中占据了重要位置。无论是观看电…

【Numpy】深入解析numpy.mat()函数

numpy.mat():深入探索NumPy中的矩阵类 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简…

鸿蒙OS开发:【一次开发,多端部署】(导航栏) 导航栏

一多导航栏 介绍 本示例展示了导航组件在不同设备形态下的样式。 在sm设备上,以tabs形式展示,内容、导航为上下样式布局,通过点击底部tabs切换内容;在md/lg设备上,以[SideBarContainer]形式展示,内容、导…

爷爷看了都会,打工人必备的摸鱼AI神器!免费!

去年,AI技术无疑成为了最为引人注目的焦点,层出不穷的创新应用令人目不暇接。尽管许多人对这股AI热潮的持久性持怀疑态度,但现实却用事实给予了最有力的反驳。AI所展现出的强大生产力,足以令人刮目相看。 而今年以来,…

鸿蒙大厂目前政策变现沉淀思考

鸿蒙引擎定制优化 鸿蒙端hotfix: 技术栈太大了,但是鸿蒙需要学习什么呢? 什么最有价值? 这就是接下来需要表达下我的观点: 1、APP开发 2、应用市场技术专员 【游戏、电商重型APP性能的处理 SmartPerf、构建自己的工…