/ 技术

Maven项目Docker一键发布配置

2018年04月12日 小雨🌦

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等编译好上传完就发布完成啦!