Jenkins通过Pipeline流水线方式编译前端项目的操作方法

 更新时间:2025年06月24日 08:53:15   作者:神志不清  
本文介绍基于Jenkins LTS镜像搭建前端CI/CD环境,通过Dockerfile安装Node.js/Yarn/zip,结合插件和声明式Pipeline实现SIT/PROD一键部署,包含部署脚本准备及扩展功能建议,感兴趣的朋友一起看看吧

本文记录了本人在前端项目持续集成与自动化部署方面的实践经验,使用 Jenkins 官方 jenkins:lts 镜像为基础,构建支持 Node.js 构建和压缩能力的运行环境,并通过声明式 Pipeline 实现一套多环境(SIT/PROD)可选的一键部署流程。模板可直接参考最下方。

一、Jenkins 镜像构建

为满足构建前端项目的需求,需在 Jenkins 镜像中安装 Node.js、Yarn 以及 zip 命令,构建用 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
# 设置国内 Yarn 源,加速依赖安装
RUN yarn config set registry https://registry.npmmirror.com
USER jenkins

二、Jenkins 插件安装推荐

安装 Jenkins 后,建议安装以下插件以支持流水线、Node 构建和远程部署功能:

  • Git Plugin

  • NodeJS Plugin

  • Yarn Plugin

  • Publish Over SSH

  • Build Name Setter

  • Pipeline

  • Blue Ocean

三、Jenkins 启动配置(docker-compose)

使用 docker-compose 启动 Jenkins,并配置数据持久化与宿主机 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

本流水线支持选择部署环境(SIT 或 PROD),会自动选择对应分支、构建命令与目标服务器,核心流程包括:

  • 拉取指定分支代码

  • 安装依赖

  • 构建打包

  • 压缩构建产物

  • 上传服务器并执行部署脚本

🎯 核心代码片段如下:

parameters {
    choice(name: 'ENVIRONMENT', choices: ['sit', 'prod'], description: '请选择部署环境')
}
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'
}

⚙️ 构建流程关键步骤:

自动切换分支与目标服务器:
env.SELECTED_BRANCH = (params.ENVIRONMENT == 'sit') ? SIT_BRANCH : PROD_BRANCH
env.TARGET_SERVER = (params.ENVIRONMENT == 'sit') ? SIT_SERVER : PROD_SERVER
构建命令根据环境切换:
def buildCmd = (params.ENVIRONMENT == 'sit') ? 'yarn run build:sit' : 'yarn run build:pro'
sh "${buildCmd}"
构建结果压缩:
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(需提前准备)

建议在目标服务器 /home/web 目录中准备 deploy.sh,执行以下内容(可按需定制):这里是简单示例,可以自己修改脚本,添加备份等步骤

#!/bin/bash
unzip -o dist.zip -d ./dist
nginx -s reload   # 若使用 nginx 提供服务

六、Pipeline流水线汇总参考

pipeline {
    agent any
    parameters {
        choice(name: 'ENVIRONMENT', choices: ['sit', 'prod'], description: '请选择部署环境')
    }
    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 "当前部署环境:${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('构建前端') {
            steps {
                script {
                    def buildCmd = (params.ENVIRONMENT == 'sit') ? 'yarn run build:sit' : 'yarn run build:pro'
                    echo "执行构建命令:${buildCmd}"
                    sh "${buildCmd}"
                }
            }
        }
        stage('压缩 dist 目录') {
            steps {
                echo "压缩 dist 目录为 ${env.ZIP_FILE}"
                sh "cd dist && zip -r ../dist.zip ."
            }
        }
stage('部署到前端服务器') {
    steps {
        echo "\033[32m****** 上传并执行部署 ******\033[0m"
        sshPublisher(
            publishers: [
                sshPublisherDesc(
                    configName: "${env.TARGET_SERVER}",  
                    transfers: [
                        // 上传构建产物 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} 环境部署完成"
            }
        }
    }
    post {
        success {
            echo "🎉 发布成功:${params.ENVIRONMENT} 环境"
        }
        failure {
            echo "❌ 发布失败,请检查日志"
        }
    }
}

后续可进一步集成:

  • 自动通知(钉钉、企业微信)

  • 构建缓存机制

  • 部署灰度策略等

到此这篇关于Jenkins通过Pipeline流水线方式编译前端项目的文章就介绍到这了,更多相关Jenkins Pipeline流水线内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vscode ssh安装librosa处理音频的解决方法

    vscode ssh安装librosa处理音频的解决方法

    这篇文章主要介绍了vscode ssh安装librosa处理音频的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 解释执行和编译执行的区别?

    解释执行和编译执行的区别?

    在说解释执行和编译执行之前先说几个概念,需要的朋友可以参考下。
    2011-09-09
  • Gateway网关工作原理及使用方法

    Gateway网关工作原理及使用方法

    本文详细讲解了Gateway网关工作原理及使用方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 新手程序员编程必不可少的工具

    新手程序员编程必不可少的工具

    这篇文章主要为大家详细介绍了新手程序员编程必不可少的工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Git基础之git在项目中的协作模式

    Git基础之git在项目中的协作模式

    这篇文章主要为大家介绍了Git基础之git在项目中的协作模式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 如何使用postman(新手入门)

    如何使用postman(新手入门)

    Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,本文主要介绍了如何使用postman,具有一定的参考价值,感兴趣的可以了解一下
    2022-01-01
  • ibatis简单实现与配置

    ibatis简单实现与配置

    ibatis与hibernate一样,同样也是一种OR框架,OR框架有很多种,相对用的比较多的就是hibernate与ibatis,ibatis是一种白自动化的ORM的实现
    2009-01-01
  • matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别

    matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别

    这篇文章主要介绍了matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Postman使用详解

    Postman使用详解

    今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一
    2020-11-11
  • chatgpt-api使用指南详解教程【官方泄露版】

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

    chatgpt-api是 OpenAI ChatGPT 的非官方的 Node.js 包装器, chatgpt-api不再需要任何浏览器破解它使用泄露出来的OpenAI官方ChatGPT 在后台使用的模型,这篇文章主要介绍了chatgpt-api使用指南【官方泄露版】,需要的朋友可以参考下
    2023-02-02

最新评论