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

jenkins构建前端vue项目 阅读详情

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

Maven Integration plugin  icon-default.png?t=N7T8https://plugins.jenkins.io/maven-plugin

CloudBees Docker Build and Publish pluginicon-default.png?t=N7T8https://plugins.jenkins.io/docker-build-publishNodeJS Pluginicon-default.png?t=N7T8https://plugins.jenkins.io/nodejs

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

比如 Maven JDK Git NodeJS Docker等

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

一、基础版本

(1)Java项目

# Build

# Root POM
pom.xml

# Goals and options
clean package -U -Dmaven.test.skip=true

Post Steps - Execute shell 

#!/bin/bash
source /etc/profile

AppHome=/app/api/
AppName=api.jar
LogPath=logs/sys-info.log

echo "应用程序 $AppName 执行停止"

PID=""
query(){
	PID=`ps -ef | grep java | grep $AppName | grep -v grep | awk '{print $2}'`
}

query
if [ x"$PID" != x"" ]; then
	kill -TERM $PID
	
	while [ x"$PID" != x"" ]
	do
		echo "应用程序 $AppName (pid:$PID) 正在停止"
		sleep 1
		query
	done
	echo "应用程序 $AppName 停止成功"
else
	echo "应用程序 $AppName 已经停止"
fi


sleep 1


echo "应用程序 $AppName [test] 执行启动"

if [ ! -d $AppHome ]; then
	echo "创建目录 $AppHome"
	mkdir $AppHome
fi

if [ ! -d ${AppHome}logs ]; then
	echo "创建目录 ${AppHome}logs"
    mkdir ${AppHome}logs
    
    echo "创建文件 $AppHome$LogPath"
    touch $AppHome$LogPath
fi

mv $WORKSPACE/target/*.jar $AppHome$AppName

echo "正在启动"
if [ -f $AppHome$AppName ]; then 
	BUILD_ID=KeepAlive
	nohup 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$LogPath
else
	echo "应用程序 $AppName 启动失败:文件不存在"
fi

(2)Vue项目

Post Steps - Execute shell  

#!/bin/bash
source /etc/profile

AppHome=/app/ui/

echo "开始重新打包"
npm install

echo "清理工作区缓存"
rm -rf $WORKSPACE/dist/*

echo "开始打包:prod"
npm run build:prod

echo "删除上次复制的文件"
rm -rf $AppHome

if [ ! -d $AppHome ]; then
	echo "创建目录 $AppHome"
	mkdir $AppHome
fi

echo "开始重新复制"
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两个文件

 

【项目部署】使用Jenkins一键打包部署前端Vue应用 嗨,大家好,我是希留,一个被迫致力于全栈开发的老菜鸟。上一篇文章我们讲到了使用Jenkins一键打包部署SpringBoot应用,这一次我们来讲下如何一键打包部署前端应用,以Vue前端应用为例。本文介绍了docker安装nginx,以及Jenkin配置node环境来打包部署前端应用。 阅读详情

相关推荐

Jenkins部署前端服务

一、Jenkins简介 官方说明: Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 官网地址: https://www.jenkins.io/index.html 总之: 使用Jenkins,可以实现一键部署发布。 Jenkins从SVN拉取代码 > 部署至发布项目的服务器 > 并启动服务。代替人工运行buil命令打包 > 上传至服务器 > 重启服务。 二、安装Jenkins

Beam 1万+

【Jenkins】部署vue项目(多种方式部署)

🥕第一种 (npm run build)打包的形式 🥕第二种 (npm run test)直接启动的形式 🥕第三种 使用docker镜像打包脚本

怀着一颗学徒的心 1万+

从零到一:若依前后端分离项目在CentOS 7上的自动化部署实践

本文详细介绍了若依前后端分离项目在CentOS 7上的自动化部署实践,涵盖环境配置、数据库部署、前后端项目构建及Nginx整合等关键步骤。通过SpringBoot框架实现高效部署,提供自动化脚本和CI/CD集成方案,助力开发者快速搭建企业级应用系统。

weixin_29258297的博客 322

Jenkins自动化部署Vue项目

Jenkins 自动化部署vue项目

前端小丑 2万+

Docker+Jenkins+Gitee+Node+Vue构建dist包并通过publish over ssh传输到服务器替换重启docker-compoet编排的nginx服务

上面讲的后台jar包的构建与持续集成过程,如果是前端Vue项目实现流程如下。

BADAO_LIUMANG_QIZHI的博客 913

别再为H5扫码头疼了!用Vue3 + vue-qrcode-reader,5分钟搞定移动端摄像头调用(附完整代码)

本文详细介绍了如何使用Vue3和vue-qrcode-reader快速实现移动端扫码功能,解决H5开发中常见的摄像头调用和兼容性问题。通过完整的代码示例和优化技巧,帮助开发者高效集成二维码识别功能,提升用户体验和开发效率。

weixin_33737134的博客 514

vue前端使用Jenkins自动构建项目,保姆级教程

实现前端vue项目自动化

Admin_yws的博客 4714

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

Jenkins部署Java(maven)项目&Vue前端项目部署流水线pipeline模版-可直接使用Jenkinsfile

Jenkins部署Java(maven)项目&Vue前端项目部署流水线pipeline模版-可直接使用Jenkinsfile

rzg的博客 2084

数据分析—用户行为数据分析

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少 → 针对该部分客户,目的就是要让他们购买,所以可以和运营部门沟通,降低利润,给出有力折扣促进购买,进而转为重要价值用户。重要价值用户(R高F高M高)维护:用户处于购买活跃期,感兴趣的商品多,购买次数也多 → 针对兴趣产品,保持一定频率的触达,持续维护。

m0_74091312的博客 1420

5分钟看懂LTE注网全流程:从PLMN选择到小区驻留的log分析技巧

本文深入解析了LTE终端从开机到成功驻留小区的完整流程,重点分享了基于QXDM和QCAT工具的log分析实战技巧。文章详细拆解了PLMN选择、System/Band扫频、小区搜索与同步、系统消息解析及驻留等关键步骤,并提供了高频问题场景的排查思路,帮助网络优化工程师快速定位终端侧、射频环境或网络配置问题。

app77的博客 432

使用docker安装jenkins并且用jenkins构建打包服务

使用docker安装jenkins并且用jenkins构建打包服务,用到harbor,kuboard

weixin_64332654的博客 734

足球赛事数据API:开发者生存指南(附真实踩坑记录)

作为一个既爱看球又爱写代码的老宅男,我这些年用过的足球API比看过的比赛还多。从最初被各种API文档折磨到怀疑人生,到现在能闭着眼睛调接口,中间的血泪史够写本书了。今天就把这些经验(和教训)分享给各位同好,特别是那些正在为"老板要做个足球App"而秃头的同行们。文档清晰免费层可用响应格式规范API-Sports免费额度大方支持GraphQL有中文文档(难得!Sportmonks数据全面有Webhook支持按需付费。

Happy0970的博客 2192

jenkins+docker+maven部署java程序

jenkins+docker+maven部署java程序

不会写后端的前端不是一个好运维。 1万+

Arcgis模型构建器01——写一个简单的模型

在使用模型构建器解决这个需求之前,我们要想清楚如果我们手动解决的话,应该如何去处理,因为构建模型的过程正是基于我们手动处理的过程来构建的。我有一个全国的dem影像数据和一个陕西省边界范围矢量,现在我想获取陕西省的dem影像的坡度数据。填写完之后点击确定,我们发现,两个输入数据和工具连接起来了,并且通过裁剪工具得到一个中间结果,即。我们发现工具框和中间数据框都存在阴影,说明已经运行过了这个模型,不报错就说明模型运行成功!现在我们就把数据和工具都串联起来了,成功构建好了模型。

爱吃雪糕的小布丁的博客 918

44位abogus补环境与纯算逆向分析

44位ab参数补环境与纯算加密流程逆向分析

吴秋霖的博客 2779

jenkins 将maven项目的jar包通过ssh远程部署到windows系统启动

将stop.bat脚本通过Jenkins插件publish-over-ssh传到远程Windows服务器下并执行windows下的命令cmd /c call C:\stop.batstop.bat的内容@echo offset port="端口号"exit​ 目的是为了把之前8091端口的服务先关闭将打包好的jar文件和start.bat上传,截止到这一步都没有问题,命令都能执行。执行命令cmd /c call C:\start.bat,脚本代码如下@echo off。

m0_69473885的博客 3002

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

docker-compose安装及前后端项目部署

docker-compose安装

鬼小生 2496

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jenkins部署多台服务器springboot+vue项目做发布和备份回滚(自创的方法,个人认为最简单易懂)

后端部署 发布和备份回滚思路,先配置选项,备份在jenkins工作目录下,新建一个备份的文件夹,回滚的时候,读取这个文件夹下的备份文件,在备份时,利用$BUILD_NUMBER取得构建版本号,加到文件末尾 配置git分支和发布回滚选项,以及一个string参数,version,下面回滚会用到 3. 话不多说,直接上脚本,(脚本其实很简单,就相当于在linux里敲命令) case $status in Deploy) echo "======status:$status========="

尖耳朵的阿凡达妹妹的博客 1301

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Jenkins 2.414 + Publish Over SSH 插件:Vue/Java 项目一键部署至 3 台服务器的实战配置

本文详细介绍了如何使用Jenkins 2.414和Publish Over SSH插件实现Vue和Java项目的自动化打包与部署,支持多服务器并行部署。通过环境准备、SSH通信配置、流水线设计等步骤,帮助企业构建高效的CI/CD流程,提升开发与部署效率。

weixin_32075843的博客 256

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

从Vue3到Spring Boot:一位Java全栈工程师的实战经验分享

我们会尽快通知你结果。祝你好运,再见!Vue3、Element Plus、表单交互、组件封装Spring Boot、MyBatis、Redis缓存、FeignClient、Spring Security、JUnit5MyBatis XML映射、SQL优化JUnit5单元测试Spring Security权限控制Logback配置Jenkins CI/CD流水线Elasticsearch基础应用这些技术点构成了一个完整的全栈开发工程师所需的技能体系,展现了应聘者在实际项目中的综合能力。

CatchLight的博客 376

电商项目环境搭建

写下这个搭建流程,记录踩坑点以及方便后续可能遇到这种类型的测试环境搭建。 项目选型:选用现在电商项目比较流行的框架Spring Boot +Vue.js(前后端分离) 项目简介:https://gitee.com/microapp/linjiashop#http://microapp.gitee.io/linjiashop/ 项目介绍:邻家小铺 对于这个项目,成功搭建部署起来需要一点基础知识,例如: 1.具备java基本知识,搭建jdk环境 2.了解mysql的搭建,mysql的基础知识 3.了解mave

oqqChin12的博客 937

RuoYi若依项目从打包到上线的全链路实践

本文详细介绍了RuoYi若依项目从打包到上线的全链路实践,包括环境准备、项目打包、服务器配置、文件上传部署、Nginx配置及常见问题排查。特别强调了RuoYi项目在JDK8下的稳定性,并提供了性能优化和安全加固的实用建议,帮助开发者高效完成项目部署。

weixin_30781775的博客 203

项目结束了……

Dison said:对了,关于后面学习内容,昨天想了一下,不知道这样是否会好些:可以从以下几个方面,对这个两年多的项目做一些总结:1。软件开发过程:比如需求管理,系统设计,开发,测试2。技术改进:比如架构,新技术[如.net 3.5],使用第三方组件[比如telerik, devexpress等]实现类似功能,web 2.0然后可以针对以上各个部分,找系统的一部分来改,通过这样来总结,可能帮助会

308

redhat安装教程

*

jinxiaoteng的博客 631
上一篇: 2个Dockerfile文件范例
星三火
博客等级 码龄10年 45粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值