分享

Jenkins + GitLab + Dockers 部署 Spring Boot 应用

 TestOps云层 2021-06-22

Spring boot 为微服务提供了便利,Docker 的发展又极大的方便了微服务的部署。这篇文章将介绍如何使用 Jenkins 快速的生成微服务的镜像以及快速启动服务。

主要流程:

  • 更新代码到 GitLab;

  • Jenkins 通过 webhook 拉取最新代码,并进行编译打包;

  • 使用生成的应用包构建 docker 镜像,并推送到镜像仓库;

  • 根据生成的镜像启动容器。

关于如何搭建GitLab,如何使用git上传代码,jenkins 如何配置、使用,Spring Boot 的编译、打包、部署,已有文章介绍,这里不再叙述。

下面介绍如何使用编译打包后的 jar 文件生成镜像,并启动容器。

生成镜像文件

启动docker时需要运行的命令在项目目录下创建 Dockerfile 文件,该文件用于构建docker镜像,Dockerfile文件是用于docker对jar包打包之后的操作的一个定义,文件名称必须是Dockerfile。

Dockerfile文件内容:

# 基础镜像

FROM openjdk:8

# 指定当前操作目录

WORKDIR /var/web

# 开放端口

EXPOSE 8081

#容器启动后执行的操作

ENTRYPOINT ["java", "-jar", "demo-0.1-SNAPSHOT.jar"]

注:

此处,我们不把jar包文件上传到镜像,以便每次更新代码的时候都需要重新构建镜像。

构建镜像并启动容器

利用前一步构建好的镜像,启动容器,使用.sh脚本的方式。

# 操作 (Dockerfile存放的路径)

BASE_PATH=/var/web

# 源jar路径  

SOURCE_PATH=/root/.jenkins/workspace/demo

# docker 镜像名称,容器名称,这里使用相同名字

DOCKER_NAME=demo

# jar 包名称

SERVER_NAME=demo-0.1-SNAPSHOT.jar

# 容器id

CID=$(docker ps | grep "$DOCKER_NAME" | awk '{print $1}')

# 镜像id

IID=$(docker images | grep "$DOCKER_NAME" | awk '{print $3}')

# 构建代码,并将 jar 包和 Dockerfile 文件移动到项目环境

function transfer(){

    echo "最新构建代码 $SOURCE_PATH/target/$SERVER_NAME.jar 和 Dockerfile 迁移至 $BASE_PATH ...."

    cp $SOURCE_PATH/target/$SERVER_NAME $BASE_PATH 

cp $SOURCE_PATH/Dockerfile $BASE_PATH 

    echo "迁移完成"

}

# 构建docker镜像

function build(){

    if [ -n "$IID" ]; then

echo "存在镜像$DOCKER_NAME,IID=$IID"

    else

echo "不存在镜像$DOCKER_NAME,开始构建镜像"

cd $BASE_PATH

docker build -t $DOCKER_NAME .

    fi

}

# 运行docker容器

function run(){

    if [ -n "$CID" ]; then

echo "存在$DOCKER_NAME容器,CID=$CID,停止并移除docker容器 ..."

docker stop $DOCKER_NAME 

         docker rm $DOCKER_NAME 

echo "$DOCKER_NAME容器停止并移除完成"

         echo "启动$DOCKER_NAME容器 ..."

docker run --name $DOCKER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8081:8081 $DOCKER_NAME

echo "启动$DOCKER_NAME完成"

else

echo "不存在$DOCKER_NAME容器,docker run创建容器..."

docker run --name $DOCKER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8081:8081 $DOCKER_NAME

echo "$DOCKER_NAME容器创建完成"

fi

}

# 执行

transfer

build

run  

后记

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多