首页 > 其他分享 >性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)

时间:2023-04-05 10:05:55浏览次数:56  
标签:容器 SpringBoot 压测 app Maven usr docker local Docker

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_JVM

前言

在上文性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(实战篇)中我们介绍了常规部署流程,本文将在上文的基础上扩展Jenkins+Maven+Docker自动化部署我们的压测环境。

关于Docker

Docker在这里有什么用?

Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 

Docker是基础架构的管理员。它将能够打包软件及其所有依赖项以作为容器运行。您可以将应用(作为docker镜像打包)部署到安装了docker的任何计算机中。它将软件与硬件分开 - 因此开发人员可以放心,应用程序将在任何计算机上运行,而不管机器可能具有哪些可能与用于编写和测试代码的机器不同的自定义设置。

题外话:本人觉得,每个Tester都应该了解下Docker,毕竟我们不是专业的运维,如果花费大量时间在倒腾一些环境的安装,也是蛮枯燥乏味的。使用了Docker可以减少很多的时间,可以直接上手部署各式各样的环境了。真的很Nice呀!

整体设计

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_docker_02

新建Jenkins Job

我们在上文常规部署Job基础上复制一个新的job

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_JVM_03

配置Job

Post Steps

Send files or execute commands over SSH中的 Execcommand修改为 jenkins-in/buildimage.sh 

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_JVM_04

新建buildimage脚本

测试应用服务上 /root/jenkins-in目录新建 buildimage.sh


1. # 设置系统时间
2. DATE=$(date +%Y%m%d)
3. # 设置程序目录
4. DIR=/usr/local/app
5. # 设置Jar名称
6. JARFILE=person-0.0.1-SNAPSHOT.jar
7. # 设置Docker镜像&容器名称
8. SERVER_NAME=springboot-docker-demo
9. # 容器id
10. CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
11. # 镜像id
12. IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
13. 
14. # 判断是否存在backp目录,如果不存储就创建
15. if [ ! -d $DIR/backup ];then
16.    mkdir -p $DIR/backup
17. fi
18. cd $DIR
19. 
20. # 杀掉当前的容器及镜像
21. docker stop $CID
22. docker rm $CID
23. docker rmi $IID
24. 
25. # 备份旧程序
26. mv $JARFILE $DIR/backup/$JARFILE$DATE
27. # 部署新程序
28. mv -f /root/jenkins-in/$JARFILE .
29. # build镜像
30. docker build -t $SERVER_NAME .
31. 
32. echo "The service will be starting"
33. # 运行容器
34. docker run --name $SERVER_NAME -d -p 8081:8081 $SERVER_NAME
35. 
36. cd backup/
37. ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
38. echo "starting success!!!"
39. ~                                

创建Dockerfile

测试应用服务器 /usr/local/app下创建Dockerfile


1. # Dockerfile
2. # 基于的镜像
3. FROM frolvlad/alpine-oraclejdk8
4. 
5. # 数据挂载点
6. VOLUME /usr/local/app/logs
7. 
8. # 指定路径下的copy内容到容器中路径下
9. ADD person-0.0.1-SNAPSHOT.jar /usr/local/app/app.jar
10. 
11. # 指定镜像的默认入口
12. # -Djava.security.egd=file:/dev/./urandom 可解决tomcat可能启动慢的问题
13. ENTRYPOINT java ${JAVA_OPTS} ${JVM_GC_LOG_PATH} -Djava.security.egd=file:/dev/./urandom -jar /usr/local/app/app.jar
14. 
15. # 对外端口
16. EXPOSE 8081
17. 
18. # 工作目录
19. WORKDIR /usr/local/app
20. 
21. # JVM参数
22. ARG JAVA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=256M \
23. -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails \
24. -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 \
25. -Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl=false \
26. -Dcom.sun.management.jmxremote.authenticate=false"
27. 
28. # log路径
29. ARG JVM_GC_LOG_PATH="-XX:ErrorFile=/usr/local/app/logs/gc/hs_err_pid%p.log -XX:HeapDumpPath=/usr/local/app/logs/gc"
30. 
31. # JVM环境变量
32. ENV JAVA_OPTS=${JAVA_OPTS}
33. ENV JVM_GC_LOG_PATH=${JVM_GC_LOG_PATH}

部署项目

点击“立即构建”,任务控制台将实时输出相关信息

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_docker_05

我们看到输出了starting success!!!,说明我们需要的应用容器已经跑起来了!

我们可以去测试应用服务器验证下

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_JVM_06

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_docker_07

我们可以看到 springboot-docker-demo镜像已经成功运行起来

测试验证

此处,我们还是使用Postman验证应用查询人员接口

性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)_Docker_08

我们可以看到应用成功返回了JSON数据,测试成功。


标签:容器,SpringBoot,压测,app,Maven,usr,docker,local,Docker
From: https://blog.51cto.com/u_15181572/6170231

相关文章

  • 一文带你弄懂 Maven 拉包原理
    业务需求开发的时候,我们总是会遇到拉不到依赖包的情况。此时如果不清楚Maven拉取依赖包的原理,那么很可能找不到问题所在。今天树哥就带大家了解下Maven拉包的原理,让你在遇到问题的时候能快速解决!三种仓库在Maven中,仓库指的是存放代码构建的一个位置。从分类上来说,Maven仓......
  • Maven 构建配置文件
    Maven仓库在Maven的术语中,仓库是一个位置(place)。Maven仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。Mave......
  • 清理 maven .LastUpdated 文件 脚本
      clearLastUpdated.cmd cls@ECHOOFFSETCLEAR_PATH=D:SETCLEAR_DIR=D:\maven_repositorycolor0aTITLEClearLastUpdatedForWindowsGOTOMENU:MENUCLSECHO.ECHO.****ClearLastUpdatedForWindows****ECHO.**ECHO.*1清理*.la......
  • SpringBoot 配置类解析
    作者:LiWanghongSpringBoot作为Java领域非常流行的开源框架,集成了大量常用的第三方库配置,SpringBoot应用中这些第三方库几乎可以是零配置的开箱即用,大部分的SpringBoot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。SpringBoot上手快,但是如果你的项目中业务场......
  • 一文带你弄懂 Maven 拉包原理
    业务需求开发的时候,我们总是会遇到拉不到依赖包的情况。此时如果不清楚Maven拉取依赖包的原理,那么很可能找不到问题所在。今天树哥就带大家了解下Maven拉包的原理,让你在遇到问题的时候能快速解决!三种仓库在Maven中,仓库指的是存放代码构建的一个位置。从分类上来说,Maven仓......
  • Spring——springboot启动源码分析
    摘要主要介绍的有关于Spring的Spring的事务注解原理和实战(SpringFramework)一、什么是事务的传播?简单的理解就是多个事务方法相互调用时,事务如何在这些方法间传播。:举个栗子,方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都会对......
  • Nginx——Nginx生产环境压测与性能优化实战
    摘要nginx的主要作用有三个方面:1、作为Web服务器;2、负载均衡服务器;3、邮件代理服务器等三个方面。其特点是占有内存少,并发能力强,给使用者带来了很多的便利。nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。但是在日常的工作......
  • Mac | 解决 MacOS 配置 Maven 出现的 Java_Home Error
    1.错误信息2.解决方案2.1对于Windows系统下解决方案https://blog.csdn.net/frankarmstrong/article/details/69945774,在MacOS下并不奏效2.2对于MacOS系统下的解决方案code~/.bash_profile#使用VSCode打开环境变量文件#配置Java_Home内容exportJAVA_HOME=$......
  • SpringBoot——注解@SpringBootConfiguration源码分析
    摘要SpringMVC是一个MVC开源框架,用来代替Struts。它是Spring项目里面的一个重要组成部分,能与SpringIOC容器紧密结合,以及拥有松耦合、方便配置、代码分离等特点,让JAVA程序员开发WEB项目变得更加容易。SpringMVC的异常处理?1.web.xml中异常处理通常为了给用户提供良好......
  • 动力节点王鹤SpringBoot3笔记——jdk新特性
    一、JDK关注的新特性1.1搭建学习环境JDK:JDK19OpenJDK:https://jdk.java.net/19/LibericaJDK:​​https://bell-sw.com/pages/downloads/​​,是一个OpenJDK发行版,为云原生,容器特别优化。Maven:构建和依赖管理,版本选择3.6以上配置本地仓库和阿里云镜像IDEA2022.3.1Ulti......