最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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一鍵部署,包含部署腳本準備及擴展功能建議,感興趣的朋友一起看看吧

本文記錄了本人在前端項目持續(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)建和遠程部署功能:

  • Git Plugin

  • NodeJS Plugin

  • Yarn Plugin

  • Publish Over SSH

  • Build Name Setter

  • Pipeline

  • Blue Ocean

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

使用 docker-compose 啟動 Jenkins,并配置數(shù)據(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)建命令與目標服務(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)鍵步驟:

自動切換分支與目標服務(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(需提前準備)

建議在目標服務(wù)器 /home/web 目錄中準備 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 "當前部署環(huán)境:${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('構(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ù)可進一步集成:

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

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

  • 部署灰度策略等

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

相關(guān)文章

  • vscode?ssh安裝librosa處理音頻的解決方法

    vscode?ssh安裝librosa處理音頻的解決方法

    這篇文章主要介紹了vscode?ssh安裝librosa處理音頻的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 解釋執(zhí)行和編譯執(zhí)行的區(qū)別?

    解釋執(zhí)行和編譯執(zhí)行的區(qū)別?

    在說解釋執(zhí)行和編譯執(zhí)行之前先說幾個概念,需要的朋友可以參考下。
    2011-09-09
  • Gateway網(wǎng)關(guān)工作原理及使用方法

    Gateway網(wǎng)關(guān)工作原理及使用方法

    本文詳細講解了Gateway網(wǎng)關(guān)工作原理及使用方法,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 新手程序員編程必不可少的工具

    新手程序員編程必不可少的工具

    這篇文章主要為大家詳細介紹了新手程序員編程必不可少的工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Git基礎(chǔ)之git在項目中的協(xié)作模式

    Git基礎(chǔ)之git在項目中的協(xié)作模式

    這篇文章主要為大家介紹了Git基礎(chǔ)之git在項目中的協(xié)作模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • 如何使用postman(新手入門)

    如何使用postman(新手入門)

    Postman是google開發(fā)的一款功能強大的網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求,本文主要介紹了如何使用postman,具有一定的參考價值,感興趣的可以了解一下
    2022-01-01
  • ibatis簡單實現(xiàn)與配置

    ibatis簡單實現(xiàn)與配置

    ibatis與hibernate一樣,同樣也是一種OR框架,OR框架有很多種,相對用的比較多的就是hibernate與ibatis,ibatis是一種白自動化的ORM的實現(xiàn)
    2009-01-01
  • matlab中乘法“*”和點乘“.*”;除法“/”和點除“./”的聯(lián)系和區(qū)別

    matlab中乘法“*”和點乘“.*”;除法“/”和點除“./”的聯(lián)系和區(qū)別

    這篇文章主要介紹了matlab中乘法“*”和點乘“.*”;除法“/”和點除“./”的聯(lián)系和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Postman使用詳解

    Postman使用詳解

    今天給大家介紹的這款網(wǎng)頁調(diào)試工具不僅可以調(diào)試簡單的css、html、腳本等簡單的網(wǎng)頁基本信息,它還可以發(fā)送幾乎所有類型的HTTP請求!Postman在發(fā)送網(wǎng)絡(luò)HTTP請求方面可以說是Chrome插件類產(chǎn)品中的代表產(chǎn)品之一
    2020-11-11
  • chatgpt-api使用指南詳解教程【官方泄露版】

    chatgpt-api使用指南詳解教程【官方泄露版】

    chatgpt-api是?OpenAI?ChatGPT?的非官方的?Node.js?包裝器,?chatgpt-api不再需要任何瀏覽器破解它使用泄露出來的OpenAI官方ChatGPT?在后臺使用的模型,這篇文章主要介紹了chatgpt-api使用指南【官方泄露版】,需要的朋友可以參考下
    2023-02-02

最新評論

浑源县| 樟树市| 崇明县| 江城| 皮山县| 彭水| 天门市| 齐齐哈尔市| 宕昌县| 万安县| 南昌县| 荆州市| 长沙县| 新邵县| 红桥区| 尚志市| 右玉县| 剑河县| 龙南县| 中山市| 云安县| 平利县| 南雄市| 巨野县| 扶风县| 常州市| 安阳县| 阿拉善左旗| 吉安市| 宜章县| 房产| 双江| 灌阳县| 诸暨市| 南宫市| 柞水县| 苍山县| 和田市| 融水| 资源县| 浦江县|