Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不包含源的情况下自动构建Docker映像?_Java_Git_Maven_Docker_Dockerfile - Fatal编程技术网

Java 如何在不包含源的情况下自动构建Docker映像?

Java 如何在不包含源的情况下自动构建Docker映像?,java,git,maven,docker,dockerfile,Java,Git,Maven,Docker,Dockerfile,我希望Dockerfile自动克隆我的GitHub存储库,使用Maven构建.jar文件,最后在映像中使用所述.jar文件,而不包括源文件或Git和Maven包 这是可能的,还是我必须在Dockerfile之外手动编译.jar文件,以便在构建它时将其复制到映像中 我的目标是让DockerHub在我向项目中推送新代码时自动重建项目的映像 目前,我的Dockerfile安装Git和Maven,克隆我的存储库并编译.jar文件。这很好,但感觉不是最佳解决方案,因为Git和Maven软件包仍然安装在映像

我希望Dockerfile自动克隆我的GitHub存储库,使用Maven构建.jar文件,最后在映像中使用所述.jar文件,而不包括源文件或Git和Maven包

这是可能的,还是我必须在Dockerfile之外手动编译.jar文件,以便在构建它时将其复制到映像中

我的目标是让DockerHub在我向项目中推送新代码时自动重建项目的映像

目前,我的Dockerfile安装Git和Maven,克隆我的存储库并编译.jar文件。这很好,但感觉不是最佳解决方案,因为Git和Maven软件包仍然安装在映像中

#Where we start
FROM openjdk:12-alpine

#Get APK up to date
RUN apk update && apk upgrade

#Install Maven
RUN apk add maven

#Git
RUN apk add git
RUN mkdir /HungryBoiiGit
RUN git clone https://github.com/hannesknutsson/HungryBoii.git /HungryBoiiGit

#Build
RUN mvn -f /HungryBoiiGit clean install

#Save result
RUN mkdir /Executables
RUN cp -r /HungryBoiiGit/target/HungryBoii-distributable/* /Executables

#Remove Git repo
RUN rm -rf /HungryBoiiGit

#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

#Define how to start
WORKDIR /Executables
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]

我知道每当我决定构建我的项目时,都会有maven插件构建和推送Docker映像,但这并不是我真正想要做的。我希望DockerHub上的自动构建可以为我完成,而不包括任何包或源。

一种方法是使用如下所述的多级构建:

多阶段构建允许您在一个阶段中安装构建依赖项并构建发布工件,然后仅将构建工件复制到最终映像

例如:

#Where we start
FROM openjdk:12-alpine AS builder

#Get APK up to date
RUN apk update && apk upgrade

#Install Maven
RUN apk add maven

#Git
RUN apk add git
RUN mkdir /HungryBoiiGit
RUN git clone https://github.com/hannesknutsson/HungryBoii.git /HungryBoiiGit

#Build
RUN mvn -f /HungryBoiiGit clean install

# Build release image
FROM openjdk:12-alpine

#Copy result
WORKDIR /Executables
COPY --from=builder /HungryBoiiGit/target/HungryBoii-distributable .

#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

#Define how to start
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]

一种方法是使用如下所述的多级构建:

多阶段构建允许您在一个阶段中安装构建依赖项并构建发布工件,然后仅将构建工件复制到最终映像

例如:

#Where we start
FROM openjdk:12-alpine AS builder

#Get APK up to date
RUN apk update && apk upgrade

#Install Maven
RUN apk add maven

#Git
RUN apk add git
RUN mkdir /HungryBoiiGit
RUN git clone https://github.com/hannesknutsson/HungryBoii.git /HungryBoiiGit

#Build
RUN mvn -f /HungryBoiiGit clean install

# Build release image
FROM openjdk:12-alpine

#Copy result
WORKDIR /Executables
COPY --from=builder /HungryBoiiGit/target/HungryBoii-distributable .

#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

#Define how to start
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]

一种方法是使用多级构建。这正是我一直在寻找的!请回复,我会将其标记为正确。:)一种方法是使用多级构建。这正是我一直在寻找的!请回复,我会将其标记为正确。:)非常感谢。正如我之前所提到的,这正是我所寻找的,而且工作起来很有魅力!非常感谢。正如我之前所提到的,这正是我所寻找的,而且工作起来很有魅力!