一、简介
本章将介绍如何制作打包镜像以及添加 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 "$@"