前言
最近在使用 spug 发布项目,发布了一个 Spring Boot 项目,遇到各种坑,记录一下。
关于 spug
spug 可以用来方便的管理项目的发布,我也是第一次用,官网地址:https://spug.cc
我们使用的 spug 是自定的镜像,里面包含了 jdk17 和 node16,因为项目要用到。
使用如下命令创建的 spug:
docker run -d \
--restart=unless-stopped \
-e MYSQL_DATABASE=spug \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=密码 \
-e MYSQL_PORT=3306 -e MYSQL_HOST=127.0.0.1 \
-v /var/lib/spug/data:/data \
--name spug_jdk17 \
-p 7766:80 \
luofeng/spug:1.0.1
看下 spug 容器里面的/data 目录:
[root@f799cddfa826 data]# ls
mysql repos spug
[root@f799cddfa826 data]# cd repos
[root@f799cddfa826 repos]# ls
1 2 3 4 build
[root@f799cddfa826 repos]#
1、2、3、4 就是我们创建的应用,我们一共创建了 4 个应用,随便进一个看看,比如 2
其实就是我们 git 项目的源码。
设置 Spring Boot 项目
接下来进行 spring boot 项目的设置:
编写 Dockerfile
# 构建镜像
FROM eclipse-temurin:17-jre
MAINTAINER luofeng0603
WORKDIR /app
ADD target/*.jar app.jar
EXPOSE 8080
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["sh","-c","java -jar app.jar --spring.profiles.active=$SPRING_PROFILES_ACTIVE"]
使用 --spring.profiles.active=$SPRING_PROFILES_ACTIVE" 让 docker run 的时候可以接受环境变量 SPRING_PROFILES_ACTIVE 就可以自由切换环境配置了。
修改 Pom.xml
pom 文件需要修改一下,新增 dockerfile-maven-plugin 插件
具体如下:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>zgyx/${project.artifactId}</repository>
<tag>latest</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
我在使用阿里云仓库的时候发现 这个插件无法下载,换成中央仓库就好了~,下完再切换回阿里云仓库。
注意此时 pom.xml 和 Dockerfile 在同一个目录。
设置 spug
新建应用
这个比较简单,随便填写一下。
新建发布
选择一下发布环境、目标主机(可以选多台)、Git 仓库地址,发布环境和目标主机如果没有的话,先创建一下。
文件过滤是我们需要将哪些文件发布到目标主机上,有包含和排除两种模式,我上面选的是包含模式,也就是说只有指定目录下的 jar 包和 Dockerfile 才是我需要的,其他文件对我来说用不着。
然后下面有两块区域分别是:代码检出钱执行和代码检出后执行,检出就是 git 中的 checkout,翻译的有点拗口。这里设置的命令是在 spug 容器执行的。那么上面的意思就是我希望 git 仓库代码拉下来之后,执行 mvn clean install -Dmaven.test.skip=true 命令,就是执行 maven 构建。因为我们安装了 dockerfile-maven 插件,所以 maven 会帮我们执行 docker 镜像构建,DOCKER_HOST 指定的是我们的目标服务器,意思就是在我们指定的目标服务器上执行 docker build 命令构建 docker 镜像。
部署路径指的是目标服务器的发布目录,这个发布目录里面只会包含我们在前面指定的满足过滤条件的文件。
存储路径可以随便指定,里面放的是历史版本。
应用发布前和应用发布后两块内容,指的是在目标服务器上执行,我们在应用发布后,执行了 :
docker rm -f xxxx
docker run -d --name xxxx -p 8080:8080 -e SPRING_PROFILES_ACTIVE=test 镜像
就是先删除老的镜像,再启动新的镜像。
然后点击提交保存,基本上完成 99% 了。
测试发布
接下来就是测试发布了,在发布申请中新建一个发布:
选择环境:
根据实际情况填写一下
点击发布:
如果发生异常,仔细看一下日志,再做修复,修复后再测~
以上就是 Spug 使用 Docker 发布 Spring Boot 项目的大致流程~
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于