
# 如何使用jib-maven-plugin插件构建Maven工程制作镜像
#### 问题现象
由于CodeArts官方提供的maven镜像中没有docker环境，所以，使用docker-maven-plugin插件构建的项目通过CodeArts的编译构建制作镜像时会报错，比如：
```
INFO: I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
```
本文将指导用户在没有docker的maven环境使用jib-maven-plugin插件制作出带有镜像的tar文件。
#### 处理方法
1. 修改需要制作镜像的项目代码。 找到pom文件并引入插件，内容如下：
   ```
   <!--使用jib插件-->
               <plugin>
                   <groupId>com.google.cloud.tools</groupId>
                   <artifactId>jib-maven-plugin</artifactId>
                   <version>1.3.0</version>
                   <configuration>
                       <!--from节点用来设置镜像的基础镜像，相当于Docerkfile中的FROM关键字-->
                       <from>
                           <!—建议使用swr公开镜像，下载速度快，更稳定 -->
                           <image>swr.example.myxxcloud.com/xxxx/xxx:xxxxx</image>
                       </from>
                       <to>
                           <!--镜像名称和tag，使用了mvn内置变量${project.version}，表示当前工程的version-->
                           <image> hellojib:${project.version}</image>
                       </to>
                       <!--容器相关的属性-->
                       <container>
                           <!--jvm内存参数-->
                           <jvmFlags>
                               <jvmFlag>-Xms4g</jvmFlag>
                               <jvmFlag>-Xmx4g</jvmFlag>
                           </jvmFlags>
                           <!--要暴露的端口-->
                           <ports>
                               <port>8080</port>
                           </ports>
                       </container>
                   </configuration>
               </plugin>
   ```
   - From标签：设置基础镜像，相当于dockerfile中的FROM关键字，这里推荐使用SWR中的镜像，构建时下载速度快并且稳定。
   
   - To标签：设置制作出来的镜像的镜像名称和tag。
   
   - Container标签：设置容器的相关属性，jvm内存参数，端口等。
   
   - mainClass标签：设置项目启动的主程序，也就是Spring Boot的Application类。
    
2. 创建构建任务并执行。
   1. 添加两个构建步骤：Maven构建和上传软件包到软件发布库，并将Maven构建默认命令修改为：
      ```
      mvn compile jib:buildTar -Dmaven.test.skip=true -U -e -X –B
      ```
      ![](https://support.huaweicloud.com/codeci_faq/public_sys-resources/note_3.0-zh-cn.png)
      jib构建工具主要包含了四个强大的功能，由于编译构建是在没有docker环境的情况下构建，所以使用build命令和dockerBuild命令并不能制作出镜像，只能使用buildTar命令制作出一个包含镜像的tar文件。
      - build提供了创建镜像并推送到远程仓库功能。
      
      - buildTar提供创建一个包含镜像的tar文件功能。
      
      - dockerBuild提供创建docker镜像到本地功能。
      
      - exportDockerContext提供创建dockerfile功能。
       
      构建成功后，日志显示如下信息：
      ![](https://support.huaweicloud.com/codeci_faq/zh-cn_image_0000001910750430.png "点击放大")
      
   
   2. 在java工程的target目录下，可以看到生成了名为jib-image.tar的文件，同时任务会通过上传软件到发布库步骤上传到发布库。
    
3. 使用tar镜像。 通过执行脚本或下载命令从发布库中将tar文件下载到要部署应用的服务器上，执行docker load命令将tar文件的镜像加载到本地镜像仓库，再使用docker run等命令启动镜像即可。
   
 
