Jenkins通過Pipeline流水線方式編譯前端項目

本文記錄了本人在前端項目持續集成與自動化部署方面的實踐經驗,使用 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…