专栏首页7DGroup性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)

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

前言

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

关于Docker

Docker在这里有什么用?

Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker是基础架构的管理员。它将能够打包软件及其所有依赖项以作为容器运行。您可以将应用(作为docker镜像打包)部署到安装了docker的任何计算机中。它将软件与硬件分开 - 因此开发人员可以放心,应用程序将在任何计算机上运行,而不管机器可能具有哪些可能与用于编写和测试代码的机器不同的自定义设置。

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

整体设计

新建Jenkins Job

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

配置Job

Post Steps

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

新建buildimage脚本

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

# 设置系统时间
DATE=$(date +%Y%m%d)
# 设置程序目录
DIR=/usr/local/app
# 设置Jar名称
JARFILE=person-0.0.1-SNAPSHOT.jar
# 设置Docker镜像&容器名称
SERVER_NAME=springboot-docker-demo
# 容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
# 镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

# 判断是否存在backp目录,如果不存储就创建
if [ ! -d $DIR/backup ];then
   mkdir -p $DIR/backup
fi
cd $DIR

# 杀掉当前的容器及镜像
docker stop $CID
docker rm $CID
docker rmi $IID

# 备份旧程序
mv $JARFILE $DIR/backup/$JARFILE$DATE
# 部署新程序
mv -f /root/jenkins-in/$JARFILE .
# build镜像
docker build -t $SERVER_NAME .

echo "The service will be starting"
# 运行容器
docker run --name $SERVER_NAME -d -p 8081:8081 $SERVER_NAME

cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
echo "starting success!!!"
~

创建Dockerfile

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

# Dockerfile
# 基于的镜像
FROM frolvlad/alpine-oraclejdk8

# 数据挂载点
VOLUME /usr/local/app/logs

# 指定路径下的copy内容到容器中路径下
ADD person-0.0.1-SNAPSHOT.jar /usr/local/app/app.jar

# 指定镜像的默认入口
# -Djava.security.egd=file:/dev/./urandom 可解决tomcat可能启动慢的问题
ENTRYPOINT java ${JAVA_OPTS} ${JVM_GC_LOG_PATH} -Djava.security.egd=file:/dev/./urandom -jar /usr/local/app/app.jar

# 对外端口
EXPOSE 8081

# 工作目录
WORKDIR /usr/local/app

# JVM参数
ARG JAVA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=256M \
-XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails \
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 \
-Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"

# log路径
ARG JVM_GC_LOG_PATH="-XX:ErrorFile=/usr/local/app/logs/gc/hs_err_pid%p.log -XX:HeapDumpPath=/usr/local/app/logs/gc"

# JVM环境变量
ENV JAVA_OPTS=${JAVA_OPTS}
ENV JVM_GC_LOG_PATH=${JVM_GC_LOG_PATH}

部署项目

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

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

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

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

测试验证

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

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

本文分享自微信公众号 - 7DGroup(Zee_7DGroup),作者:左泽位

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能环境之docker操作指南1(全网最全)

    4.添加官方密钥 执行该命令时,如遇到长时间没有响应说明网络连接不到docker网站,需要使用代-理进行。

    高楼Zee
  • 性能环境之docker操作指南4(全网最全)

    使用image创建container并进入交互模式, login shell是/bin/bash

    高楼Zee
  • 走进Java接口测试之简单解决写接口脏数据问题

    由此可见,这些事先创建好的测试数据( Out-of-box ),在测试用例执行的那个时刻,是否依然可用其实是不一定的,因为这些数据很有可能在被使用前已经发生了非...

    高楼Zee
  • docker学习系列19 容器化Angular项目

    请留意下匿名卷/usr/src/app/node_modules。 该目录是在docker build构建阶段创建的,在Run启动阶段需要手动挂载该目录。

    mafeifan
  • Docker学习记录(1)——搭建自己的Docker Registry

    最近在编写Kubernetes demo的时候,遇到了一个问题:当相同的Pod部署到不同的Node上时,每个Node都得下载Pod中指定的镜像文件。 由于“墙”...

    胡了了
  • 如何在Docker容器中运行Docker [3种方法]

    /var/run/docker.sock是默认的Unix套接字。套接字用于在同一主机上的进程之间进行通信。Docker守护程序默认情况下侦听docker.soc...

    泽阳
  • 第七章 Docker三剑客

    DOCKER技术在推出后掀起了一阵容器化技术的热潮,容器化使得服务的部署变得极其简易,这为微服务和分布式计算提供了很大的便利。

    BH9AP_Librant
  • Docker环境搭建和全终端无插件网页摄像机直播管理服务EasyNVS的部署方案详解

    在产品实际应用中,当多个EasyNVR分布在不同的区域或者不同的网络环境下,集中管理就显得至关重要,此时需要一个可以集中管控这些EasyNVR,并且云端输出的平...

    EasyNVR
  • 学习docker on windows (1): 为什么要使用docker

    为什么要用Docker? 如果我们想使用某种pc软件, 那么在互联网上查找并安装软件的流程大致如下图: ? 那么这就有几个问题要弄清楚: 从哪里获得软件 Ap...

    solenovex
  • Jenkins在shell脚本运行docker权限报错解决

    能够在shell中使用docker version打印版本号,但是无法执行docker,报错信息如下

    易墨

扫码关注云+社区

领取腾讯云代金券