Maven 项目 Docker 一键发布配置
Docker 用了很久了,之前 Maven 项目一直用的docker-maven-plugin,但是作者目前已经不推荐使用这种方式了,该项目已经不再更新功能,只提供 bugfix。他们的新项目叫做dockerfile-maven,配置上有些不同,之前一直没时间去更新,最近的一个项目中,采用了最新的插件,中间也踩过不少坑,刚刚终于都搞定了,记录一下。
Dockerfile 无需多说,整理了一个通用的,可以用在任意 Spring Boot 项目中,如下:
FROM frolvlad/alpine-oraclejdk8:slim
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENV ENV=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=$ENV" ]
在用阿里云容器服务的时候,这里的ENV
可以直接显示到配置项中进行配置,根据不同的配置选择不同的 profiles 文件。
pom.xml
文件中,加入plugin
,会自动添加版本号和latest
两个tag
,并推送。
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>tag-image-version</id>
<phase>deploy</phase>
<goals>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>${project.version}</tag>
</configuration>
</execution>
<execution>
<id>tag-image-latest</id>
<phase>deploy</phase>
<goals>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>latest</tag>
</configuration>
</execution>
</executions>
<configuration>
<repository>registry.cn-hangzhou.aliyuncs.com/xxx/${project.artifactId}</repository>
<tag>${project.version}</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
想要直接用mvn deploy
完成整个部署的话,还需要加一下 Nexus 的发布配置
<distributionManagement>
<repository>
<id>monkey-run-maven-release</id>
<name>MonkeyRun Maven Release Repository</name>
<url>你的nexus仓库地址</url>
</repository>
</distributionManagement>
阿里云容器上配置好镜像更新重新部署的触发器,之后就是直接mvn deploy
等编译好上传完就发布完成啦!
评论区