【问题标题】:Can I automate my spring-boot docker builds with the dockerfile or would Jenkins be more appropriate?我可以使用 dockerfile 自动化我的 spring-boot docker 构建还是 Jenkins 更合适?
【发布时间】:2019-12-25 05:42:33
【问题描述】:

在第一次尝试为我的个人 spring-boot github 存储库(我是新手)设置自动 docker 构建之后,由于找不到 jar 文件,他们不断失败。虽然我的第一印象是路径错误,但我突然意识到 docker 在尝试构建之前并没有构建 jar。

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/myjar*.jar
ADD ${JAR_FILE} myjar.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/myjar.jar"]

虽然我找到了一些描述如何将 maven 集成到 Dockerfile 中的资源,但使用这种方法,我的图像似乎很容易变得太大太容易。之前有没有人解决过这个问题并且可以推荐一种将 maven 集成到 Dockerfile 构建中的方法?我考虑过的另一种选择是学习 Jenkins 并以这种方式为管道开发解决方案。

【问题讨论】:

    标签: maven spring-boot docker jenkins github


    【解决方案1】:

    有很多方法可以实现这一点。

    方法 1

    依靠 maven 及其 docker maven plugin 这确实允许在 Maven 构建期间构建图像。

    这种方法通常会起作用,并且允许进行足够的自定义级别 许多用例。通常,Spring Boot 应用程序作为一个 Jar,其中包含所有依赖项,因此 docker 映像中不需要多层(至少根据我的经验)。

    这里的重点是在spring boot的jar已经建好的时候调用插件。 jar 是在另一个插件的帮助下准备的,它通常在package 阶段调用,所以如果你使用这种方法,请确保在构建单个 jar 工件的 spring boot maven 插件之后调用图像创建插件.

    工件必须位于<you_module>/target 文件夹中,并且它的大小会非常大。原始模块将位于其旁边,但后缀为.original

    方法 2

    让 maven 构建工件而不是镜像。 Maven 将在此步骤后结束。 然后在 Jenkins 中调用一个脚本,该脚本将运行 docker build 命令并构建映像。

    结果是一样的,如果你真的需要它,你可以直接在这里使用 docker,可能会利用它的所有好处。

    这两种方法都适合您,在它们之间进行选择取决于以下因素:

    • 您更像是 Java / maven 人而不是 devops 人 - 然后使用方法 1,否则使用方法 2

    • 您希望实际在本地运行您构建的映像,例如,如果您在本地安装了 kubernetes 集群 - 在这种情况下,请使用方法 1

    • 您需要利用插件中无法使用的 docker 的一些最新功能 - 然后使用方法 2

    【讨论】:

    • 谢谢。我在搜索中看到过该插件,但之前并没有过多考虑。我现在可能会走这条路
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2017-02-11
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多