Jib是google开源的Java容器化工具
- 简单——Jib使用Java开发,并作为Maven或Gradle的一部分运行。你不需要编写Dockerfile或运行Docker守护进程,甚至无需创建包含所有依赖的大JAR包。因为Jib与Java构建过程紧密集成,所以它可以访问到打包应用程序所需的所有信息。在后续的容器构建期间,它将自动选择Java构建过的任何变体。
- 快速——Jib利用镜像分层和注册表缓存来实现快速、增量的构建。它读取你的构建配置,将你的应用程序组织到不同的层(依赖项、资源、类)中,并只重新构建和推送发生变更的层。在项目进行快速迭代时,Jib只讲发生变更的层(而不是整个应用程序)推送到注册表来节省宝贵的构建时间。
- 可重现——Jib支持根据Maven和Gradle的构建元数据进行声明式的容器镜像构建,因此,只要输入保持不变,就可以通过配置重复创建相同的镜像。
仓库地址:https://github.com/GoogleContainerTools/jib
1. 配置jib插件
使用如下maven插件替换docker-maven-plugin
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.10</version>
<configuration>
<from>
<image>openjdk:alpine</image>
</from>
<to>
<image>${registry_url}/hec/${project.artifactId}:${project.version}-${ci_pipeline_id}</image>
<auth>
<username>${registry_username}</username>
<password>${registry_password}</password>
</auth>
</to>
<container>
<jvmFlags>
<jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
</jvmFlags>
</container>
</configuration>
</plugin>
插件配置中的用户密码及镜像库地址在ci的环境变量中配置
2.配置ci文件
修改.gitlab-ci.yml的内容如下
image: xxx.com/xxx-tools/cibase:0.5.0
variables:
MAVEN_OPTS: -Dmaven.repo.local=.m2/repository
BUILD_CI_NAME: $CI_COMMIT_REF_NAME-$CI_PIPELINE_ID
stages:
- build
- dev-release
cache:
key: one-key-for-all
paths:
- .m2/repository/
build:
stage: build
script: "mvn -U clean compile"
dev-release:
stage: dev-release
only:
- tags
- development-uat
- /^release-.*$/
when: manual
script:
- "mvn compile jib:build -Dregistry_url=$REGISTRY_URL -Dregistry_username=$REGISTRY_USERNAME -Dregistry_password=$REGISTRY_PASSWORD -Dci_pipeline_id=$BUILD_CI_NAME"
3.启动参数修改
由于jib的打包方式,暂时不支持Docker启动时传入JAVA_OPTS环境变量,可以用JAVA_TOOL_OPTIONS替代,效果一样,docker环境变量配置如下:
JAVA_TOOL_OPTIONS
-Xmx512m -Denv=dev