本章将介绍如何制作打包镜像以及添加 gradle task 。
二、grade镜像制作由于我们是基于 gradle 进行构建项目的,所以需要制作 gradle 镜像来打包,如下代码,就可以得到基于 jdk8 的 gradle7.5 镜像
FROM openjdk:8u332-jdk
# 获取gradle并解压
RUN echo "Downloading Gradle" &&
wget -O gradle.zip https://downloads.gradle-dn.com/distributions/gradle-7.5-all.zip
&& unzip gradle.zip
&& rm gradle.zip
# 设置环境变量
ENV USER_HOME=/home/gradle
USER=gradle
JAVA_HOME=/usr/local/openjdk-8/
TZ=Asia/Shanghai
GRADLE_HOME=/gradle-7.5
GRADLE_VERSION=7.5
# 设置全局软链接
RUN ln -s "${GRADLE_HOME}/bin/gradle" "/usr/bin/gradle"
&& echo "Testing Gradle installation"
&& gradle --version
# 设置进入的工作路径
WORKDIR $USER_HOME
写好 Dockerfile 后就可以开始制作镜像了,使用如下命令 docker build -t mc/gradle:1.0.0 .
三、制作基于脚本的构建镜像那么有了 gradle 镜像后,需要一个触发启动的脚本才能发动打包动作,于是再添加一层镜像
启动脚本
#!/bin/sh if [ "$1" = "pack" ]; then set -- buildService elif [ "$1" = "buildJar" ]; then set -- copyRunnerJar elif [ $# -lt 1 ]; then set -- copyRunnerJar fi /usr/bin/gradle -p ./app --no-daemon --parallel "$@"
制作启动镜像
FROM mc/gradle:1.0.0 # 定制脚本gradle.sh,将脚本复制到容器中 COPY --chown=gradle:gradle gradle.sh /home/gradle
写好 Dockerfile 后就可以开始制作镜像了,使用如下命令 docker build -t mc/build_service:1.0.0 .
四、添加task如果想要构建项目,就需要在 build.gradle 文件里边添加 task 才能自定义构建,添加如下构建
-
构建任务一
复制依赖包到指定目录下task copyDepends(type: Copy) { from configurations.runtimeClasspath into "build/dist/libs/runtime" } -
构建任务二
复制配置文件task copyConfig(type: Copy) { from "src/main/resources/config" into "build/dist/conf" } -
构建任务三
复制之前提到的脚本task copyShell(type: Copy) { from "src/main/resources/bin/" excludes << "boot.sh" into "build/dist/bin/" } -
构建任务四
执行以上的任务task copyRunnerJar(type: Copy) { copyRunnerJar.dependsOn(build, copyDepends, copyConfig,copyShell) from "build/libs/${rootProject.name}-${version}.jar" into "build/dist/bin" rename { it.replace(it, "${rootProject.name}.jar") } } -
构建任务五
压缩打包task buildService(type: Zip) { buildService.dependsOn(clean, copyRunnerJar) from "build/dist" destinationDir file('build/distributions') baseName "${rootProject.name}" version "${project.version}-${LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))}" } -
构建任务六
清除clean { delete << "out" }
拥有 mc/build_service:1.0.0 镜像后,你已经成功了一半了
编写构建脚本 build.sh ,将其放在目录根目录下,使用如下命令可以直接启动编译流程
开始打包构建: sh build.sh pack
仅仅打包 jar: sh build.sh buildJar
#!/bin/sh IMG_NAME="mc/build_service:1.0.0" docker run -it --rm -v $PWD:/home/gradle/app $IMG_NAME sh gradle.sh "$@"



