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 '❌ 前端项目构建、打包或部署失败!'
        }
    }
}
相关推荐
小汐睡着了2 小时前
Docker镜像源-error
运维·docker·容器
写代码的学渣2 小时前
nmon下载安装使用方法
linux·运维
zdd567892 小时前
GIN索引原理
运维·算法·postgresql
努力也学不会java2 小时前
【Spring Cloud】初识Spring Cloud
运维·人工智能·后端·spring·机器学习·spring cloud
hqyjzsb2 小时前
技术鸿沟与角色突围:AI时代产品经理的能力重构与CAIE认证价值
运维·人工智能·职场和发展·重构·产品经理·学习方法·编程语言
GCKJ_08242 小时前
【观成科技】银狐再进化:新型变种加密通信机制分析
运维·服务器·网络
吃不饱的得可可4 小时前
【Linux】System V消息队列与责任链模式
linux·运维·责任链模式
G_H_S_3_10 小时前
【网络运维】Docker 存储:镜像层与数据卷的管理应用
linux·运维·网络·docker
手揽回忆怎么睡13 小时前
Alibaba Linux 8安装jdk25
linux·运维·服务器