本文记录了本人在前端项目持续集成与自动化部署方面的实践经验,使用 Jenkins 官方 jenkins:lts 镜像为基础,构建支持 Node.js 构建和压缩能力的运行环境,并通过声明式 Pipeline 实现一套多环境(SIT/PROD)可选的一键部署流程。模板可直接参考最下方


一、Jenkins 镜像构建

为满足构建前端项目的需求,需在 Jenkins 镜像中安装 Node.js、Yarn 以及 zip 命令,构建用 Dockerfile 如下:

FROM jenkins/jenkins:ltsUSER root# 安装 Node.js 和 Yarn
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \apt-get install -y nodejs zip && \npm install -g yarn# 设置国内 Yarn 源,加速依赖安装
RUN yarn config set registry https://registry.npmmirror.comUSER jenkins

二、Jenkins 插件安装推荐

安装 Jenkins 后,建议安装以下插件以支持流水线、Node 构建和远程部署功能:

  • Git Plugin

  • NodeJS Plugin

  • Yarn Plugin

  • Publish Over SSH

  • Build Name Setter

  • Pipeline

  • Blue Ocean


三、Jenkins 启动配置(docker-compose)

使用 docker-compose 启动 Jenkins,并配置数据持久化与宿主机 Docker 访问能力:

services:jenkins:image: d0fdd1f559e3  # 自定义镜像 IDcontainer_name: jenkinsrestart: on-failure:3user: rootports:- "18080:8080"- "50000:50000"environment:TZ: Asia/ShanghaiLANG: zh_CN.UTF-8LANGUAGE: zh_CN:zhLC_ALL: zh_CN.UTF-8volumes:- ./data:/var/jenkins_home- /usr/bin/docker:/usr/bin/docker- /var/run/docker.sock:/var/run/docker.sock- /etc/localtime:/etc/localtime:ro

四、前端自动部署 Pipeline

本流水线支持选择部署环境(SIT 或 PROD),会自动选择对应分支、构建命令与目标服务器,核心流程包括:

  1. 拉取指定分支代码

  2. 安装依赖

  3. 构建打包

  4. 压缩构建产物

  5. 上传服务器并执行部署脚本

🎯 核心代码片段如下:

parameters {choice(name: 'ENVIRONMENT', choices: ['sit', 'prod'], description: '请选择部署环境')
}environment {GIT_URL = 'http://192.168.1.100/xxx.git'GIT_CREDENTIAL_ID = '6c626e79-xxxx'SIT_BRANCH = 'sit'PROD_BRANCH = 'master'SIT_SERVER = '192.168.1.50'PROD_SERVER = '192.168.1.151'DEPLOY_PATH = '/home/web'DEPLOY_SCRIPT = 'deploy.sh'BUILD_DIR = 'dist'ZIP_FILE = 'dist.zip'
}

⚙️ 构建流程关键步骤:

自动切换分支与目标服务器:
env.SELECTED_BRANCH = (params.ENVIRONMENT == 'sit') ? SIT_BRANCH : PROD_BRANCH
env.TARGET_SERVER = (params.ENVIRONMENT == 'sit') ? SIT_SERVER : PROD_SERVER
构建命令根据环境切换:
def buildCmd = (params.ENVIRONMENT == 'sit') ? 'yarn run build:sit' : 'yarn run build:pro'
sh "${buildCmd}"
构建结果压缩:
cd dist && zip -r ../dist.zip .
上传并部署:
sshPublisher(configName: "${env.TARGET_SERVER}",transfers: [sshTransfer(sourceFiles: "${ZIP_FILE}",remoteDirectory: "${DEPLOY_PATH}",execCommand: """cd /home/${DEPLOY_PATH}bash ${DEPLOY_SCRIPT}""")]
)

五、部署脚本 deploy.sh(需提前准备)

建议在目标服务器 /home/web 目录中准备 deploy.sh,执行以下内容(可按需定制):这里是简单示例,可以自己修改脚本,添加备份等步骤

#!/bin/bash
unzip -o dist.zip -d ./dist
nginx -s reload   # 若使用 nginx 提供服务

六、Pipeline流水线汇总参考

pipeline {agent anyparameters {choice(name: 'ENVIRONMENT', choices: ['sit', 'prod'], description: '请选择部署环境')}environment {GIT_URL = 'http://192.168.1.10/xxx.git'GIT_CREDENTIAL_ID = '6c626e79-856c-403e-a07b-96b8a40'SIT_BRANCH = 'develop'PROD_BRANCH = 'master'SIT_SERVER = '192.168.1.150'PROD_SERVER = '192.168.1.50'DEPLOY_PATH = 'home/web'DEPLOY_SCRIPT = 'deploy.sh'BUILD_DIR = 'dist'ZIP_FILE = 'dist.zip'  // 压缩文件的名称}stages {stage('拉取代码') {steps {script {env.SELECTED_BRANCH = (params.ENVIRONMENT == 'sit') ? SIT_BRANCH : PROD_BRANCHenv.TARGET_SERVER = (params.ENVIRONMENT == 'sit') ? SIT_SERVER : PROD_SERVERecho "当前部署环境:${params.ENVIRONMENT}, 使用分支:${env.SELECTED_BRANCH}, 目标主机:${env.TARGET_SERVER}"checkout([$class: 'GitSCM',branches: [[name: "*/${env.SELECTED_BRANCH}"]],userRemoteConfigs: [[url: "${env.GIT_URL}",credentialsId: "${env.GIT_CREDENTIAL_ID}"]]])}}}stage('安装依赖') {steps {sh 'yarn install'}}stage('构建前端') {steps {script {def buildCmd = (params.ENVIRONMENT == 'sit') ? 'yarn run build:sit' : 'yarn run build:pro'echo "执行构建命令:${buildCmd}"sh "${buildCmd}"}}}stage('压缩 dist 目录') {steps {echo "压缩 dist 目录为 ${env.ZIP_FILE}"sh "cd dist && zip -r ../dist.zip ."}}stage('部署到前端服务器') {steps {echo "\033[32m****** 上传并执行部署 ******\033[0m"sshPublisher(publishers: [sshPublisherDesc(configName: "${env.TARGET_SERVER}",  transfers: [// 上传构建产物 dist.zipsshTransfer(sourceFiles: "${ZIP_FILE}",  removePrefix: '',remoteDirectory: "${DEPLOY_PATH}",  // 相对 Jenkins SSH Remote DirectorycleanRemote: false,execCommand: """cd /home/${DEPLOY_PATH}bash ${DEPLOY_SCRIPT}""")],verbose: true)])}
}stage('完成') {steps {echo "✅ ${params.ENVIRONMENT} 环境部署完成"}}}post {success {echo "🎉 发布成功:${params.ENVIRONMENT} 环境"}failure {echo "❌ 发布失败,请检查日志"}}
}

后续可进一步集成:

  • 自动通知(钉钉、企业微信)

  • 构建缓存机制

  • 部署灰度策略等

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

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

相关文章

Dockerfile 镜像构建

目录 简介 一、Docker镜像概念与结构 1.1 镜像的分层存储机制 1.2 镜像分层的关键特性 二、Dockerfile语法 2.1 基础构建指令 2.2 环境配置指令 2.3 文件操作指令 2.4 运行时指令 2.5 网络与数据管理 三、实战案例 3.1 构建Nginx Web服务器 3.2 构建Tomcat应用服务…

Docker Desktop 4.42集成的MCP工具包

一、介绍 Docker Desktop 4.42 集成了 MCP(Model‑Client‑Plugin)Toolkit,无需额外安装扩展即可直接使用。 MCP Toolkit 集成细节 内置于 Docker Desktop:你可以直接打开应用,在设置中启用 MCP 服务器,比…

CUDA NCU Occupancy学习笔记

占用率是每个多处理器的活跃 Warp 数量与最大可能活跃 Warp 数量的比率。另一种查看占用率的方式是,硬件处理 Warp 的能力中,实际使用 Warp 的百分比。较高的占用率并不一定能带来更高的性能,然而,较低的占用率总是会降低隐藏延迟…

配置自己的NTP 服务器做时间同步

✅ 推荐方案:使用 chrony 搭建 NTP 服务器(适用于 CentOS 7/8/9) chrony 是 CentOS 推荐的 NTP 实现,精度高、资源占用低、同步快,默认在 CentOS 8 中取代了 ntpd。 🔧 一、安装 chrony sudo yum install…

【运维系列】Plane 开源项目安装和配置指南

Plane是一个用现代前端技术栈(Next.js TailwindCSS)开发的开源项目管理平台,核心理念是 Bring Structure to Chaos" —— 给混乱的项目管理带来结构感。 1.项目地址 gitHub 2.项目使用的关键技术和框架 Plane 项目使用了多种关键技术…

3.读取图片和图片采集

目录 一、Halcon 1. 图片的基本概念 2. 获取图片方式1-读取本地图片 3. 获取图片方式2-在线采集 4. C#获取图片数据架构 二、VS联合编程 1. 读取本地图片 2.在线采集 一、Halcon 1. 图片的基本概念 1. 图片2. 像素 3. 分辨率4. 位深度5. 不同后缀1. png jpg 2. bmp 6…

前端流式接口/Socket.IO/WebSocket的区别和选用

WebSocket: 定义:WebSocket是一种在单个TCP连接上进行全双工通信的协议,实现了客户端与服务器之间的实时双向通信。特点:基于HTTP协议,但通过握手升级为WebSocket协议,支持持久连接,减少延迟和带…

QT 学习笔记摘要(二)

第一节 常用控件 1. QWidget 核心属性 1.1 objectName 1.2 enabled API说明 isEnabled() 获取到控件的可⽤状态 setEnabled() 设置控件是否可使⽤. true 表⽰可⽤, false 表⽰禁⽤ 1.3 geometry && window frame geometry: x y width height API 说明 geom…

FastAPI + Redis 高性能任务队列实现:AI内容生成系统实践

FastAPI Redis 高性能任务队列实现:AI内容生成系统实践 引言 在现代应用中,任务队列是处理资源密集型操作的重要组件。本文将详细介绍一个基于FastAPI和Redis实现的高性能任务队列系统,该系统用于处理AI图片和视频的生成请求。我们将从架构…

光学跟踪系统在汽车远程设计验证中的应用优势

在汽车制造行业,传统设计验证流程依赖实体模型评审,存在周期长、成本高、跨地域协作困难等痛点。随着光学跟踪技术的突破,以ART、OptiTrack为代表的高精度光学追踪系统正重塑汽车远程设计验证的范式。本文从技术原理、应用场景及产业价值三个…

windows 访问ubuntu samba配置

1. 启用文件共享和SMB 1.0/CIFS支持 首先,确保Windows启用了文件共享和SMB 1.0/CIFS支持1。 步骤: 打开控制面板 -> 程序 -> 程序和功能 -> 启用或关闭Windows功能。 勾选“SMB 1.0/CIFS 文件共享支持”。 2. 启用不安全的来宾登录 有时需要启用不安…

Apache Doris 3.0.6 版本正式发布

亲爱的社区小伙伴们,Apache Doris 3.0.6 版本已于 2025 年 06 月 16 日正式发布。 该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。 GitHub 下载 官网下载 行为变更 禁止 Unique 表使用时序 Compaction存算分离场景下 Auto Bucket 单分桶容…

安全帽检测数据集简介(约2万张图片)

安全帽检测数据集简介(约2万张图片) 📦 已发布目标检测数据集合集(持续更新)安全帽检测数据集简介(约2万张图片)📁 数据集概况🖼️ 数据样本展示 YOLOv8 训练实战&#x…

RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:

一、千兆以太网的标准与物理层基础 1. 标准规范 千兆以太网遵循 IEEE 802.3ab(针对双绞线)和 IEEE 802.3z(针对光纤)标准,其中 RJ45 接口对应双绞线场景,核心是通过四对双绞线(CAT5e/CAT6 线缆…

Node.js爬虫 CheerioJS ‌轻量级解析、操作和渲染HTML及XML文档

简介 ‌ CheerioJS ‌ 是一个专为 Node.js 设计的轻量级库&#xff0c;用于解析、操作和渲染 HTML 及 XML 文档&#xff0c;语法类似 Jquery。 安装 npm install cheerio 示例 const cheerio require("cheerio");const html <html><head><tit…

华为运维工程师面试题(英语试题,内部资料)

华为运维工程师面试题(英语试题,内部资料) 一、英文自我介绍,重点突出自己运维经验(10分) 二、短语翻译(英译中)(15*3分=45分) 1. Data is a collection of un-organized facts, which can include words, numb ers, images, and sounds. 1. 数据是未经组织的事…

【赵渝强老师】使用mydumper备份MySQL

MySQL在备份方面包含了自身的mysqldump工具&#xff0c;但其只支持单线程工作&#xff0c;这就使得它无法迅速的备份数据。而mydumper作为一个实用工具&#xff0c;能够良好支持多线程工作&#xff0c;这使得它在处理速度方面十倍于传统的mysqldump。其特征之一是在处理过程中需…

华为云 Flexus+DeepSeek 征文|华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】

华为云 FlexusDeepSeek 征文&#xff5c;华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】 文章目录 华为云 FlexusDeepSeek 征文&#xff5c;华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】前言1、…

✨通义万相 2.1(Wan2.1)环境搭建指南:基于 CUDA 12.4 + Python 3.11 + PyTorch 2.5.1 GPU加速实战

&#x1f680;【超详细】基于 CUDA 12.4 Python 3.11 构建 Wan2.1 项目的集成推理环境&#xff08;含 PyTorch 2.5.1 GPU 安装教程&#xff09; 本文将一步一步带你搭建一个可用于构建和运行 Wan2.1 的深度学习环境&#xff0c;完全兼容 CUDA 12.4&#xff0c;并基于官方镜像 …

PROFIBUS DP转ETHERNET/IP在热电项目中的创新应用

在热电项目中&#xff0c;多种设备的高效协同是保障能源稳定供应的关键。PROFIBUS DP与ETHERNET/IP两种工业通信协议因特性不同而应用场景各异。通过协议转换技术实现JH-PB-EIP疆鸿智能PROFIBUS DP转ETHERNET/IP&#xff0c;可整合西门子PLC与电力仪表、变频器等设备&#xff0…