Jenkins + GitLab + Dockers 部署 Spring Boot 应用
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# 容器idCID=$(docker ps | grep "$DOCKER_NAME" | awk '{print $1}')# 镜像idIID=$(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_PATHcp $SOURCE_PATH/Dockerfile $BASE_PATHecho "迁移完成"}# 构建docker镜像function build(){if [ -n "$IID" ]; thenecho "存在镜像$DOCKER_NAME,IID=$IID"elseecho "不存在镜像$DOCKER_NAME,开始构建镜像"cd $BASE_PATHdocker build -t $DOCKER_NAME .fi}# 运行docker容器function run(){if [ -n "$CID" ]; thenecho "存在$DOCKER_NAME容器,CID=$CID,停止并移除docker容器 ..."docker stop $DOCKER_NAMEdocker rm $DOCKER_NAMEecho "$DOCKER_NAME容器停止并移除完成"echo "启动$DOCKER_NAME容器 ..."docker run --name $DOCKER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8081:8081 $DOCKER_NAMEecho "启动$DOCKER_NAME完成"elseecho "不存在$DOCKER_NAME容器,docker run创建容器..."docker run --name $DOCKER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8081:8081 $DOCKER_NAMEecho "$DOCKER_NAME容器创建完成"fi}# 执行transferbuildrun后记