上传 jar 到海外服务器往往比较慢 , 随着部署频率变高 , 这种上传 jar 再部署容器的方式变得不太能满足需求 . 这里简单改造下为项目集成插件打包镜像到私有仓库 , 服务器直接拉去私有仓库的镜像进行部署

首先本地是需要有 Docker 环境的

若依 项目来说明 , 直接在 ruoyi-admin 下集成 dockerfile-maven-plugin 插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!-- docker打包镜像插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<executions>
<execution>
<id>tag-latest</id>
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>latest</tag>
</configuration>
</execution>
<execution>
<id>tag-version</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<!-- 自定义版本号 -->
<tag>${my.version}</tag>
</configuration>
</execution>
</executions>
<configuration>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<!-- 构建的用户凭证 -->
<username>仓库用户名</username>
<password>仓库密码</password>
<contextDirectory>${project.basedir}</contextDirectory>
<dockerfile>Dockerfile</dockerfile>
<buildArgs>
<!-- 构建的jar包文件名 -->
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>

这里 executions 里重点说明一下 , 配置是在 maven package 命令后执行打包镜像上传操作 , 两个 execution 是将打包镜像并且打标签为自定义版本号及 latest 然后推送到私有仓库 , 符合我们在拉取镜像时的习惯

这里其实不是完整的配置 , 没有配置仓库相关信息 , 因为我们要通过 profile 去区分不同环境

在同文件里添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<profiles>
<!-- 生产环境配置 -->
<profile>
<id>production</id>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<configuration>
<!-- 生产镜像仓库 -->
<repository>生产仓库</repository>
<buildArgs>
<!-- 生产环境的配置 -->
<ACTIVE>druidprod,prod</ACTIVE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile>

<!-- 测试环境配置 -->
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<configuration>
<!-- 测试镜像仓库 -->
<repository>测试仓库</repository>
<buildArgs>
<!-- 测试环境的配置 -->
<ACTIVE>druidtest,test</ACTIVE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>

配置完后直接点击 IDEA 右侧的 Maven package 会打包成功, 但是构建镜像失败 ,因为没有指定 profile 环境

这里可以通过命令行执行

1
mvn clean package -DskipTests -f pom.xml -P test

-P 后面的为环境id ,以上演示则为 production / test

也可以在 IDEA 启动项做配置

这里附 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
#FROM openjdk:8-jdk-alpine
FROM frolvlad/alpine-java:jdk8-slim
VOLUME /tmp
COPY target/ruoyi-admin.jar app.jar

# 获取插件传入的参数
ARG ACTIVE

ENV ACTIVE $ACTIVE
ENV TIMEZONE="America/Los_Angeles"
ENTRYPOINT ["java","-jar","-Duser.timezone=${TIMEZONE}","/app.jar","--spring.profiles.active=${ACTIVE}"]

参考链接