Jenkins pipeline流水线方式部署前端包

以freestyle方式部署前后端可以参考:

jenkins+mqtt实现本地构建和远程自动发版_jenkins远程调用和本地调用-CSDN博客

jenkins部署nodejs前端项目_jenkins nodejs-CSDN博客

以流水线方式部署后端参考

Jenkins pipeline流水线方式部署后端jar-CSDN博客

一个简单的前端打包部署的例子

复制代码
pipeline {
    agent any
    environment {
        // ========== 代码仓库配置 ==========
        GIT_REPO = 'http://gitlab.xxx.com/[部门/项目组]/[前端项目名]'  // 替换为你的Git仓库占位符
        GIT_BRANCH = 'master'                                      // 可根据需求改为dev/test等分支
        GIT_CRED_ID = 'gitlab-credentials-id'                      // Jenkins中配置的Git凭证ID占位符
        
        // ========== 前端打包配置(通用) ==========
        BUILD_DIR = '.'                                            // 前端项目根目录(打包命令执行路径)
        DIST_TAR_NAME = 'dist.tar.gz'                              // 打包后的压缩包名称
        NODEJS_NAME = 'nodejs'                                     // Jenkins全局配置的Node.js名称(需与实际配置一致)
        
        // ========== SSH部署配置 ==========
        SSH_SERVER_ID = 'ssh-server-credentials-id'                // Jenkins中配置的SSH服务器凭证ID占位符
        REMOTE_BASE_DIR = '/data/frontend'                         // 远程服务器前端文件存储根目录(占位符)
        REMOTE_TAR_PATH = "${REMOTE_BASE_DIR}/dist.tar.gz"         // 远程压缩包存储路径
        REMOTE_DEPLOY_DIR = '/data/frontend/nginx/html'            // Nginx前端部署根目录(占位符)
    }
    stages {
        stage('拉取代码') {
            steps {
                echo '开始拉取前端Git代码...'
                git url: "${GIT_REPO}", branch: "${GIT_BRANCH}", credentialsId: "${GIT_CRED_ID}"
            }
        }

        stage('前端环境校验') {
            steps {
                echo '注入Node.js环境并校验版本...'
                // 注入Node.js环境到PATH,解决node/npm命令找不到的问题
                nodejs(nodeJSInstallationName: "${NODEJS_NAME}") {
                    sh """
                        set -e
                        node -v
                        npm -v
                    """
                }
            }
        }

        stage('安装依赖并打包构建') {
            steps {
                echo '开始安装前端依赖并执行打包...'
                nodejs(nodeJSInstallationName: "${NODEJS_NAME}") {
                    sh """
                        set -e  # 执行出错时立即退出
                        cd ${BUILD_DIR}
                        # 安装依赖
                        npm install
                        # 清空旧dist目录(目录不存在时忽略错误)
                        rm -rf ./dist/* || true
                        # 执行dev环境打包(可改为build:test/build:prod)
                        npm run build:dev
                        # 清空旧压缩包
                        rm -rf ${DIST_TAR_NAME} || true
                        # 打包dist目录为tar.gz(保留目录结构)
                        tar czvf ${DIST_TAR_NAME} -C ./dist .
                    """
                }
            }
        }

        stage('验证打包产物') {
            steps {
                echo "检查压缩包是否存在:${BUILD_DIR}/${DIST_TAR_NAME}"
                sh "ls -l ${BUILD_DIR}/${DIST_TAR_NAME} || (echo '前端打包产物不存在,构建失败' && exit 1)"
            }
        }

        stage('SSH部署到远程服务器') {
            steps {
                echo '开始通过SSH部署前端包到远程服务器...'
                sshPublisher(publishers: [
                    sshPublisherDesc(
                        configName: "${SSH_SERVER_ID}",
                        transfers: [
                            sshTransfer(
                                cleanRemote: false,
                                excludes: '',
                                flatten: true,  // 扁平化传输,压缩包直接放到远程指定目录
                                makeEmptyDirs: false,
                                noDefaultExcludes: false,
                                patternSeparator: '[, ]+',
                                remoteDirectory: "${REMOTE_BASE_DIR}",  // 远程文件传输目录
                                remoteDirectorySDF: false,
                                removePrefix: "",
                                sourceFiles: "${BUILD_DIR}/${DIST_TAR_NAME}"  // 本地压缩包路径
                            )
                        ],
                        // 远程执行部署命令(清空目标目录 + 解压包)
                        execCommand: """
                            set -e
                            # 清空前端部署目录(目录不存在时忽略错误)
                            rm -rf ${REMOTE_DEPLOY_DIR}/* || true
                            # 解压压缩包到部署目录
                            tar zxvf ${REMOTE_TAR_PATH} -C ${REMOTE_DEPLOY_DIR}
                            # 验证解压结果
                            echo '部署后目录文件列表:'
                            ls -l ${REMOTE_DEPLOY_DIR}
                        """,
                        execTimeout: 120000,  // 命令执行超时时间(2分钟)
                        usePromotionTimestamp: false,
                        useWorkspaceInPromotion: false,
                        verbose: true  // 开启详细日志,便于调试
                    )
                ])
            }
        }
    }
    post {
        success {
            echo '✅ 前端项目构建、打包及部署成功!'
        }
        failure {
            echo '❌ 前端项目构建、打包或部署失败!'
        }
    }
}
相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
在角落发呆7 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
裴东青8 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
哎呦,帅小伙哦8 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn9 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
张小姐的猫9 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain9 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
xxx1x1x9 小时前
极客向:DLL/运行库故障的底层逻辑与自动化修复方案
运维·自动化·dll文件·dll·dll修复·dll缺失·dll一键修复
YuanDaima20489 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
lolo大魔王11 小时前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器