Jib是google開源的Java容器化工具
- 簡單——Jib使用Java開發(fā)奋隶,并作為Maven或Gradle的一部分運行。你不需要編寫Dockerfile或運行Docker守護進程牵辣,甚至無需創(chuàng)建包含所有依賴的大JAR包。因為Jib與Java構(gòu)建過程緊密集成扑馁,所以它可以訪問到打包應用程序所需的所有信息搁料。在后續(xù)的容器構(gòu)建期間,它將自動選擇Java構(gòu)建過的任何變體贝淤。
- 快速——Jib利用鏡像分層和注冊表緩存來實現(xiàn)快速柒竞、增量的構(gòu)建。它讀取你的構(gòu)建配置播聪,將你的應用程序組織到不同的層(依賴項朽基、資源、類)中离陶,并只重新構(gòu)建和推送發(fā)生變更的層稼虎。在項目進行快速迭代時,Jib只講發(fā)生變更的層(而不是整個應用程序)推送到注冊表來節(jié)省寶貴的構(gòu)建時間枕磁。
- 可重現(xiàn)——Jib支持根據(jù)Maven和Gradle的構(gòu)建元數(shù)據(jù)進行聲明式的容器鏡像構(gòu)建渡蜻,因此,只要輸入保持不變计济,就可以通過配置重復創(chuàng)建相同的鏡像。
倉庫地址: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的環(huán)境變量中配置
2.配置ci文件
修改.gitlab-ci.yml的內(nèi)容如下
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.啟動參數(shù)修改
由于jib的打包方式排苍,暫時不支持Docker啟動時傳入JAVA_OPTS環(huán)境變量沦寂,可以用JAVA_TOOL_OPTIONS替代,效果一樣淘衙,docker環(huán)境變量配置如下:
JAVA_TOOL_OPTIONS
-Xmx512m -Denv=dev