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 '❌ 前端项目构建、打包或部署失败!'
        }
    }
}
相关推荐
牛马工作号30 分钟前
Mosquitto + ACME:从 Docker Compose 部署到 TLS 证书自动续期与加载
运维·docker·容器
Initialize-le3 小时前
Nginx 504 超时、499 一堆?网关排查法
运维·nginx
Android系统攻城狮6 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
快乐的韭菜根根6 小时前
ubuntu 安装slurm并配置
linux·运维·ubuntu
U-Mail邮件系统7 小时前
自建邮箱服务器有哪些软件?三款主流邮件服务器软件推荐
运维·服务器
天远数科8 小时前
零信任架构实战:基于天远贷前风险报告构建自动化消金信贷风控与多头共债排查网关
运维·人工智能·架构·自动化
别动我齐刘海10 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
honsor10 小时前
机房IP化改造首选:以太网温湿度传感器,PoE供电+Modbus TCP一网搞定
linux·运维·服务器
星创易联10 小时前
PLC数据采集与远程运维平台:从边缘计算到集中监控
大数据·运维·边缘计算
寻道模式11 小时前
【运维心得】完整教程:绕过Win11限制让老机焕发新生
运维·操作系统·win11