应用上K8S第二步:Gradle 打包

需求

对于spring boot项目我们一般使用Maven或Gradle进行编译打包,也可以借助docker plugin进行镜像打包并push到远程仓库。因此在经过《应用上K8S第一步:Dockerfile参数化构建技巧》一文,我们已经确定了Dockerfile,那么应用上K8S第二步:gradle打包就可以开始了。

现在我们就来介绍下gradle打包,大家感兴趣的话也可以和maven打包对比下,并进一步掌握这两种方式。

gradle docker plugin

1.https://plugins.gradle.org/plugin/com.palantir.docker2.https://github.com/palantir/gradle-docker❞

「1.官方标准接入项目」

# vim build.gradle

buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.palantir.gradle.docker:gradle-docker:0.34.0"
}
}

apply plugin: "com.palantir.docker"

「2.自定义接入」

# vim build.gradle

buildscript {
repositories {
maven {
mavenLocal()
// 接入内部私服仓库
url "http://nexus.xxxx.net/repository/public"
}
}
dependencies {
// 插件所在路径
classpath "com.palantir.gradle.docker:gradle-docker:0.34.0"
}
}
// 应用插件
apply plugin: "com.palantir.docker"

// docker打包
docker {
// Dockerfile文件,默认在项目根目录
dockerfiel file('Dockerfile')
// 内部harbor仓库
name "harbor.xxx.net/public/$project.name:$project.version"
file jar.archivePath
// 使用双引号
buildArgs([JAR_FILE: "$jar.archivePath"])
}

# vim Dockerfile
#基础镜像java 1.8
From java
#匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷
VOLUME /tmp
ARG JAR_FILE
ARG APP_NAME
ENV APP_NAME=${APP_NAME}
COPY ${JAR_FILE} ${APP_NAME}.jar
ENTRYPOINT ["/bin/sh","-c","java -Dapp.name=${APP_NAME} ${JVM_OPTS} -jar /${APP_NAME}.jar"]

我们将应用名、JVM参数作为环境变量单独提取出来,用于docker参数化构建;也在后续在K8S中以configmap或env的形式进行参数传递。

注意:ARG只在Dockerfile中生效,且在docker build阶段生效。

「3.编译打包」

# 只本地打包
gradle clean build -x test docker -i

# 本地打包并push仓库
gradle clean build -x test dockerPush -i

# 注意:push前,现登录harbor保存密钥
docker login harbor.xxx.net

总结

相对于Maven打包过程,Gradle打包的配置更简单,但是其官网文档对gradle  docker plugin的描述过于简单,导致某些更细节的配置摸索起来比较麻烦。

另,经过以上过程,我们需要对镜像打包过程定义一些规范,例如:

  • 应用名不能够用大写;
  • 镜像名及tag以应用名+版本号进行定义;
  • JVM参数根据实际情况需进一步拆分,以便后续通过环境变量进行参数化构建;
  • 其他应用运行依赖的配置、数据等目录,需进一步定义;

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/164561.html

(0)
联系我们
联系我们
分享本页
返回顶部