1、
gitlab-ci.yml中构建阶段单独构建,上传到minio缓存服务,下次构建时,只需要重新拉取缓存服务器上的依赖包,增量打包构建。
.gitlab-ci.yml中配置如下:
stages:- validate- unit-test- build- package- deploy- .postimage: registry.cn-hangzhou.aliyuncs.com/123/maven:3-jdk-8-slim......build:jar:stage: buildscript:- mvn $MAVEN_OPTS -Dmaven.test.skip=true -U package deploytags:- mavenartifacts:paths:- manage-provider/target/manage-provider*.jarexpire_in: 1 weekonly:refs:- tags- masterbuild:image:stage: packageimage: gcr.azk8s.cn/kaniko-project/executor:debugdependencies:- build:jarscript:- |docker build $CI_PROJECT_DIR \-t $IMAGE:$IMAGE_TAG \-t $IMAGE:latest- docker push $IMAGE:$IMAGE_TAG- docker push $IMAGE:latesttags:- docker-builderwhen: manualallow_failure: falseonly:refs:- tags- master.....
这种方式将maven项目的package和Dockerfile制作推送分成两步,好处是可以看到每次package时候的日志输出,缺点是每次打完包都要上传依赖包到缓存服务器,加长了部署时间。
2、
Dockerfile中使用多阶段构建,只取jar包,添加到镜像中,构建在服务器上。依赖存放服务器本地或者私有镜像仓库
使用多阶段构建Dockerfile
以Java Maven项目为例,在Java Maven项目中新建Dockerfile文件,并在Dockerfile文件添加以下内容。
说明 该Dockerfile文件使用了二阶段构建。
第一阶段:选择Maven基础镜像(Gradle类型也可以选择相应Gradle基础镜像)完成项目编译,拷贝源代码到基础镜像并运行RUN命令,从而构建Jar包。
第二阶段:拷贝第一阶段生成的Jar包到OpenJDK镜像中,设置CMD运行命令。
# First stage: complete build environmentFROM maven:3.5.0-jdk-8-alpine AS builder# add pom.xml and source codeADD ./pom.xml pom.xmlADD ./src src/# package jarRUN mvn clean package# Second stage: minimal runtime environmentFrom openjdk:8-jre-alpine# copy jar from the first stageCOPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jarEXPOSE 8080CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"]
这种方式将package和制作镜像,推送镜像放到了一起,省去了推送依赖包到缓存服务的时间。
