亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Jenkins通過Pipeline流水線方式編譯前端項目的操作方法

 更新時間:2025年06月24日 08:53:15   作者:神志不清  
本文介紹基于Jenkins?LTS鏡像搭建前端CI/CD環(huán)境,通過Dockerfile安裝Node.js/Yarn/zip,結(jié)合插件和聲明式Pipeline實現(xiàn)SIT/PROD一鍵部署,包含部署腳本準(zhǔn)備及擴(kuò)展功能建議,感興趣的朋友一起看看吧

本文記錄了本人在前端項目持續(xù)集成與自動化部署方面的實踐經(jīng)驗,使用 Jenkins 官方 jenkins:lts 鏡像為基礎(chǔ),構(gòu)建支持 Node.js 構(gòu)建和壓縮能力的運行環(huán)境,并通過聲明式 Pipeline 實現(xiàn)一套多環(huán)境(SIT/PROD)可選的一鍵部署流程。模板可直接參考最下方。

一、Jenkins 鏡像構(gòu)建

為滿足構(gòu)建前端項目的需求,需在 Jenkins 鏡像中安裝 Node.js、Yarn 以及 zip 命令,構(gòu)建用 Dockerfile 如下:

FROM jenkins/jenkins:lts
USER 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
# 設(shè)置國內(nèi) Yarn 源,加速依賴安裝
RUN yarn config set registry https://registry.npmmirror.com
USER jenkins

二、Jenkins 插件安裝推薦

安裝 Jenkins 后,建議安裝以下插件以支持流水線、Node 構(gòu)建和遠(yuǎn)程部署功能:

  • Git Plugin

  • NodeJS Plugin

  • Yarn Plugin

  • Publish Over SSH

  • Build Name Setter

  • Pipeline

  • Blue Ocean

三、Jenkins 啟動配置(docker-compose)

使用 docker-compose 啟動 Jenkins,并配置數(shù)據(jù)持久化與宿主機(jī) Docker 訪問能力:

services:
  jenkins:
    image: d0fdd1f559e3  # 自定義鏡像 ID
    container_name: jenkins
    restart: on-failure:3
    user: root
    ports:
      - "18080:8080"
      - "50000:50000"
    environment:
      TZ: Asia/Shanghai
      LANG: zh_CN.UTF-8
      LANGUAGE: zh_CN:zh
      LC_ALL: zh_CN.UTF-8
    volumes:
      - ./data:/var/jenkins_home
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro

四、前端自動部署 Pipeline

本流水線支持選擇部署環(huán)境(SIT 或 PROD),會自動選擇對應(yīng)分支、構(gòu)建命令與目標(biāo)服務(wù)器,核心流程包括:

  • 拉取指定分支代碼

  • 安裝依賴

  • 構(gòu)建打包

  • 壓縮構(gòu)建產(chǎn)物

  • 上傳服務(wù)器并執(zhí)行部署腳本

?? 核心代碼片段如下:

parameters {
    choice(name: 'ENVIRONMENT', choices: ['sit', 'prod'], description: '請選擇部署環(huán)境')
}
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'
}

?? 構(gòu)建流程關(guān)鍵步驟:

自動切換分支與目標(biāo)服務(wù)器:
env.SELECTED_BRANCH = (params.ENVIRONMENT == 'sit') ? SIT_BRANCH : PROD_BRANCH
env.TARGET_SERVER = (params.ENVIRONMENT == 'sit') ? SIT_SERVER : PROD_SERVER
構(gòu)建命令根據(jù)環(huán)境切換:
def buildCmd = (params.ENVIRONMENT == 'sit') ? 'yarn run build:sit' : 'yarn run build:pro'
sh "${buildCmd}"
構(gòu)建結(jié)果壓縮:
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(需提前準(zhǔn)備)

建議在目標(biāo)服務(wù)器 /home/web 目錄中準(zhǔn)備 deploy.sh,執(zhí)行以下內(nèi)容(可按需定制):這里是簡單示例,可以自己修改腳本,添加備份等步驟

#!/bin/bash
unzip -o dist.zip -d ./dist
nginx -s reload   # 若使用 nginx 提供服務(wù)

六、Pipeline流水線匯總參考

pipeline {
    agent any
    parameters {
        choice(name: 'ENVIRONMENT', choices: ['sit', 'prod'], description: '請選擇部署環(huán)境')
    }
    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_BRANCH
                    env.TARGET_SERVER = (params.ENVIRONMENT == 'sit') ? SIT_SERVER : PROD_SERVER
                    echo "當(dāng)前部署環(huán)境:${params.ENVIRONMENT}, 使用分支:${env.SELECTED_BRANCH}, 目標(biāo)主機(jī):${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('構(gòu)建前端') {
            steps {
                script {
                    def buildCmd = (params.ENVIRONMENT == 'sit') ? 'yarn run build:sit' : 'yarn run build:pro'
                    echo "執(zhí)行構(gòu)建命令:${buildCmd}"
                    sh "${buildCmd}"
                }
            }
        }
        stage('壓縮 dist 目錄') {
            steps {
                echo "壓縮 dist 目錄為 ${env.ZIP_FILE}"
                sh "cd dist && zip -r ../dist.zip ."
            }
        }
stage('部署到前端服務(wù)器') {
    steps {
        echo "\033[32m****** 上傳并執(zhí)行部署 ******\033[0m"
        sshPublisher(
            publishers: [
                sshPublisherDesc(
                    configName: "${env.TARGET_SERVER}",  
                    transfers: [
                        // 上傳構(gòu)建產(chǎn)物 dist.zip
                        sshTransfer(
                            sourceFiles: "${ZIP_FILE}",  
                            removePrefix: '',
                            remoteDirectory: "${DEPLOY_PATH}",  // 相對 Jenkins SSH Remote Directory
                            cleanRemote: false,
                            execCommand: """
                                cd /home/${DEPLOY_PATH}
                                bash ${DEPLOY_SCRIPT}
                            """
                        )
                    ],
                    verbose: true
                )
            ]
        )
    }
}
        stage('完成') {
            steps {
                echo "? ${params.ENVIRONMENT} 環(huán)境部署完成"
            }
        }
    }
    post {
        success {
            echo "?? 發(fā)布成功:${params.ENVIRONMENT} 環(huán)境"
        }
        failure {
            echo "? 發(fā)布失敗,請檢查日志"
        }
    }
}

后續(xù)可進(jìn)一步集成:

  • 自動通知(釘釘、企業(yè)微信)

  • 構(gòu)建緩存機(jī)制

  • 部署灰度策略等

到此這篇關(guān)于Jenkins通過Pipeline流水線方式編譯前端項目的文章就介紹到這了,更多相關(guān)Jenkins Pipeline流水線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 超好用的免費內(nèi)網(wǎng)穿透工具【永久免費不限制流量】

    超好用的免費內(nèi)網(wǎng)穿透工具【永久免費不限制流量】

    對于開發(fā)人員來講,演示內(nèi)網(wǎng)web站點、本地開發(fā)微信公眾號、小程序開發(fā)、調(diào)試第三方支付系統(tǒng)對接等開發(fā)環(huán)境,往往需要一個環(huán)境可以進(jìn)行調(diào)試,市面上內(nèi)網(wǎng)穿透工具有很多,這里推薦一款簡單又好用的cpolar,可以永久免費使用,不限制流量,支持http/https/tcp協(xié)議
    2022-09-09
  • 詳細(xì)介紹 進(jìn)程、線程和協(xié)程的區(qū)別

    詳細(xì)介紹 進(jìn)程、線程和協(xié)程的區(qū)別

    這篇文章主要介紹了詳細(xì)介紹 進(jìn)程、線程和協(xié)程的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 關(guān)于HTTPS的TSL握手

    關(guān)于HTTPS的TSL握手

    這篇文章主要介紹了關(guān)于HTTPS的TSL握手,HTTP一般基于TCP協(xié)議,而HTTPS就是在這之間加了SSL/TLS協(xié)議,那么在TCP三次握手建立TCP連接后,就需要TLS握手建立SSL/TLS連接,需要的朋友可以參考下
    2023-04-04
  • 大數(shù)據(jù)HelloWorld-Flink實現(xiàn)WordCount

    大數(shù)據(jù)HelloWorld-Flink實現(xiàn)WordCount

    這篇文章主要介紹了大數(shù)據(jù)HelloWorld-Flink實現(xiàn)WordCount的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 最新IDEA永久激活教程(支持最新2019.2版本)

    最新IDEA永久激活教程(支持最新2019.2版本)

    這篇文章主要介紹了最新IDEA永久激活教程,此教程已支持最新2019.2版本,適用Windows、Mac、Ubuntu等所有平臺,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Grafana window下載安裝及influxdb集成配置的實現(xiàn)

    Grafana window下載安裝及influxdb集成配置的實現(xiàn)

    本文主要介紹了Grafana window下載安裝及influxdb集成配置的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Typora使用方法

    Typora使用方法

    今天用Typora因為升級了一下,所以需要激活雖然勉強(qiáng)能用,但是老是彈出激活頁面,很是苦惱,只能通過百度找方法進(jìn)行解決一下了,下面跟隨小編看下Typora使用方法,需要的朋友可以參考下
    2022-04-04
  • Ceph集群CephFS文件存儲核心概念及部署使用詳解

    Ceph集群CephFS文件存儲核心概念及部署使用詳解

    這篇文章主要為大家介紹了Ceph集群CephFS文件存儲核心概念及部署使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 最新WebStorm2020.2注冊碼永久激活(激活到2089年)

    最新WebStorm2020.2注冊碼永久激活(激活到2089年)

    JetBrains旗下有多款編譯器工具(如:IntelliJ、WebStorm、PyCharm等)在各編程領(lǐng)域幾乎都占據(jù)了壟斷地位。今天給大家?guī)淼氖菍ebStorm最新版激活至2089年
    2020-09-09
  • 前端工程Monorepo項目管理方式

    前端工程Monorepo項目管理方式

    這篇文章主要介紹了現(xiàn)代前端越來越離不開的項目管理方式Monorepo的概念、MultiRepo的弊端、Monorepo的收益以及Monorepo的落地這幾個角度來認(rèn)識和學(xué)習(xí)Monorepo
    2022-07-07

最新評論