小工具知识网

当前位置: 首页 > 行业知识 > 使用Jenkins部署前端Vue项目和后端Java服务

行业知识

使用Jenkins部署前端Vue项目和后端Java服务

2026-11-15 08:15:57 来源:互联网转载

Jenkins安装相关插件,供后续使用(Dashboard - Manage Jenkins - Plugins)

Maven Integration plugin  https://plugins.jenkins.io/maven-plugin

CloudBees Docker Build and Publish pluginhttps://plugins.jenkins.io/docker-build-publishNodeJS Pluginhttps://plugins.jenkins.io/nodejs

配置内置的工具及其版本 (Dashboard - Manage Jenkins - Tools)​​​​​

比如 Maven JDK Git NodeJS Docker等

添加凭据,如SSH Private Key 用于拉取远程代码(Dashboard - Manage Jenkins - Credentials)​​​​​

一、基础版本

(1)Java项目

# Build# Root POMpom.xml# Goals and optionsclean package -U -Dmaven.test.skip=true

Post Steps - Execute shell 

#!/bin/bashsource /etc/profileAppHome=/app/api/AppName=api.jarLogPath=logs/sys-info.logecho "应用程序 $AppName 执行停止"PID=""query(){PID=`ps -ef | grep java | grep $AppName | grep -v grep | awk '{print }'`}queryif [ x"$PID" != x"" ]; thenkill -TERM $PIDwhile [ x"$PID" != x"" ]doecho "应用程序 $AppName (pid:$PID) 正在停止"sleep 1querydoneecho "应用程序 $AppName 停止成功"elseecho "应用程序 $AppName 已经停止"fisleep 1echo "应用程序 $AppName [test] 执行启动"if [ ! -d $AppHome ]; thenecho "创建目录 $AppHome"mkdir $AppHomefiif [ ! -d ${AppHome}logs ]; thenecho "创建目录 ${AppHome}logs"    mkdir ${AppHome}logs        echo "创建文件 $AppHome$LogPath"    touch $AppHome$LogPathfimv $WORKSPACE/target/*.jar $AppHome$AppNameecho "正在启动"if [ -f $AppHome$AppName ]; then BUILD_ID=KeepAlivenohup java -jar $AppHome$AppName --spring.profiles.active=prod --server.port=$port > /dev/null 2>&1 &sleep 5    tail -50 $AppHome$LogPath        sleep 5    tail -50 $AppHome$LogPath        sleep 5    tail -50 $AppHome$LogPathelseecho "应用程序 $AppName 启动失败:文件不存在"fi

(2)Vue项目

Post Steps - Execute shell  

#!/bin/bashsource /etc/profileAppHome=/app/ui/echo "开始重新打包"npm installecho "清理工作区缓存"rm -rf $WORKSPACE/dist/*echo "开始打包:prod"npm run build:prodecho "删除上次复制的文件"rm -rf $AppHomeif [ ! -d $AppHome ]; thenecho "创建目录 $AppHome"mkdir $AppHomefiecho "开始重新复制"cp -rf $WORKSPACE/dist/* $AppHome echo "部署成功"

 二、使用Docker + Pipline

Dockerfile参考上文。

(1)Java项目

流水线 Pipeline script

pipeline {    agent any        environment {        // 在 Jenkins 全局工具配置中定义的插件安装的名称        MAVEN_HOME = tool 'maven3.8.7'        PATH="${MAVEN_HOME}/bin:${env.PATH}"        GIT_SSH_COMMAND = 'ssh -i /var/lib/jenkins/.ssh/id_rsa'    }        stages {        stage('MAVEN Versions') {            steps {                echo 'MAVEN version:'                sh 'mvn -v'            }        }        stage('Clone Repository') {            steps {                script {                    // 使用指定的私钥克隆仓库并切换到分支                    checkout([$class: 'GitSCM', branches: [[name: 'pc']], userRemoteConfigs: [[credentialsId: 'f2564736-xxxx-xx-xx', url: 'git@xxxxxx.git']]])                }            }        }                stage('Build War') {            steps {                sh 'mvn clean package -U -Dmaven.test.skip=true'            }        }        stage('Docker Build and Deploy') {            steps {                script {                    def imageName = 'api'                    def ctName = 'api-ct'                                        // Stop and remove the previous container                    sh "docker stop ${ctName} || true"                    sh "docker rm ${ctName} || true"                    sh "docker rmi ${imageName} || true"                    // Build Docker image                    sh "docker build -f Dockerfile -t ${imageName} ."                    // Start a new container                    sh "docker run --restart always -d -p 9008:9008 -e ACTIVE_PROFILE='pc' -e SERVICE_PORT='9008' --name $ctName --ulimit nofile=1024 --network host $imageName"                }            }        }        }    post {        success {            echo 'Deployment successful!'        }        failure {            echo 'Deployment failed!'        }    }}

(2)Vue项目

流水线 Pipeline script

pipeline {    agent any        environment {        // 在 Jenkins 全局工具配置中定义的 Node.js 安装的名称        NODEJS_HOME = tool 'node16.3.0'        PATH="${NODEJS_HOME}/bin:${env.PATH}"        GIT_SSH_COMMAND = 'ssh -i /var/lib/jenkins/.ssh/id_rsa'    }        stages {        stage('Set npm Registry') {            steps {                script {                    sh 'npm config set registry https://registry.npmmirror.com'                    sh 'npm config get registry'                }            }        }        stage('Node and NPM Versions') {            steps {                echo 'Node version:'                sh 'node -v'                                echo 'NPM version:'                sh 'npm -v'            }        }        stage('Clone Repository') {            steps {                script {                    // 使用指定的私钥克隆仓库并切换到 pc 分支                    checkout([$class: 'GitSCM', branches: [[name: 'pc']], userRemoteConfigs: [[credentialsId: 'f2564736-xx-x-xx-xxx', url: 'git@xxxxx.git']]])                }            }        }                stage('Install Dependencies') {            steps {                sh 'npm install --verbose --legacy-peer-deps'            }        }        stage('Build') {            steps {                sh 'npm run build:hylt-pc'            }        }        stage('Docker Build and Deploy') {            steps {                script {                    def imageName = 'ui'                    def ctName = 'ui-ct'                                        // Stop and remove the previous container                    sh "docker stop ${ctName} || true"                    sh "docker rm ${ctName} || true"                    sh "docker rmi ${imageName} || true"                    // Build Docker image                    sh "docker build -f Dockerfile -t ${imageName} ."                    // Start a new container                    sh "docker run --restart always -d -p 1908:1908 --name ${ctName} --network host ${imageName}"                }            }        }        }    post {        success {            echo 'Deployment successful!'        }        failure {            echo 'Deployment failed!'        }    }}

注意此处使用的jenkins内置的nodejs和npm,Vue项目在部署过程中使用到了项目根目录下的Dockerfile和nginx.conf两个文件

 

上一篇:揭秘F11键的隐藏功能,一键掌控,强大作用揭秘!

下一篇:服务器怎么设置网站域名?