
# 基于Maven构建产物制作Docker镜像并发布到镜像仓（内置执行机/图形化构建）
#### 应用场景
本实践为您介绍如何使用CodeArts Build将构建产物通过Dockerfile文件制作成Docker镜像，并发布到容器镜像服务的镜像仓库，您可以使用容器镜像中的构建产物进行编译或者部署。
 #### 约束限制
- 已在容器镜像服务中[创建组织](https://support.huaweicloud.com/usermanual-swr/swr_01_0014.html)，组织名称为"codeci_gray"。
- 需已具备CodeArts Repo服务的操作权限，具体操作可参考[授权使用CodeArts Repo服务](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0132.html)。
 
#### 操作流程
表1操作流程 
| **流程**                                                                                        | **说明**                          |
|:---|:---|
| [新建项目]               | 为本实践新建项目。                       |
| [新建CodeArts Repo代码仓] | 为本实践创建构建过程中使用的代码文件。             |
| [新建构建任务]               | 新建本实践中需要使用的构建任务并按照本实践场景配置任务并执行。 |
| [查看构建结果]              | 查看本实践的构建结果，包括查看构建日志和结果文件。       |
   
 #### 新建项目
1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002051251774.png)，在服务列表中选择"开发与运维 \> 华为云码道 CodeArts"。
3. 单击"立即使用"，进入CodeArts服务首页。
4. 在首页单击"新建项目"，选用"Scrum"项目模板。
5. 项目名称填写"build-bestpractice"，其他保持默认即可。
6. 单击"确定"后，进入到"build-bestpractice"项目下。
 
 #### 新建CodeArts Repo代码仓
1. 在页面导航栏选择"代码 \> 代码托管"。
2. 单击"新建仓库"，选择"模板仓库"，单击"下一步"。
3. 选择"Java Maven Demo"模板，单击"下一步"。
4. 填写代码仓库名称为"build_docker_image_repo"，其他参数保持默认即可。单击"确定"，代码仓创建完成，跳转到代码仓详情页面。
5. 在代码仓根目依次单击"新建 \> 新建文件"。 
   图1新建文件   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002051251014.png)
   
   
6. 文件名命名为"Dockerfile"，复制如下代码，粘贴到文件内容，如[图3]所示，单击"提交"。
   
   ```
   FROM ubuntu:latest
   # set maintainer
   LABEL maintainer=build
   RUN mkdir /release_app 
   COPY ./target/javaMavenDemo-1.0.jar /release_app/maven_app.jar
   USER build
   ```
   其中"javaMavenDemo-1.0.jar"为"pom.xml"文件里定义的"${artifactId}-${version}.${packaging}"，如[图2]所示。
   图2pom.xml文件   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002051092702.png)
   图3Dockerfile文件内容   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002087370109.png)
   
   
 
 #### 新建构建任务
1. 在页面导航中选择"持续交付 \> 编译构建"。
2. 单击"新建任务"，根据[表2]填写参数信息，单击"下一步"。
   
    表2基本信息配置 
   | **参数** | **说明**                                                                                                                              |
   |:---|:---|
   | 任务名称   | 自定义任务名称，例如：build_docker_image_task。                                                                                                 |
   | 代码源    | 选择构建时拉取的代码源，这里选择"Repo"。                                                                                                             |
   | 代码仓    | 选择[新建CodeArts Repo代码仓]中新建的代码仓库名称"build_docker_image_repo"。 |
   | 默认分支   | 选择默认"master"即可。                                                                                                                     |
      
   
   
3. 选择"空白构建模板"，单击"确定"按钮，构建任务创建完成，自动跳转至构建步骤配置页面。
4. 在"构建步骤"页签，单击"图形化"，单击左侧"点击添加构建步骤"，添加"Maven构建"，参数保持默认即可。
5. 单击"添加步骤"，在右侧区域"容器类"页签中，单击"制作镜像并推送到SWR仓库"所在行的"添加"，按照[图4]配置参数。
   
   其中"组织"选择[约束限制]中创建的组织名称"hwstaff_codeci_gray"，"镜像名字"输入"release_image"，"镜像标签"输入"v1.0"，其他参数保持默认即可。
   图4配置构建步骤   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002087251537.png)
   
   
6. 单击页面右上角"保存并执行"，在弹出的窗口中单击"确定"，自动跳转到构建任务执行页面。
 
 #### 查看构建结果
1. "步骤日志"页签中，"构建日志"控制台会滚动打印构建任务执行日志信息。如[图5]所示，构建日志控制台打印了Maven构建产物信息。
   
   图5Maven构建产物信息   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002051251018.png)
   
   
2. 待构建任务成功执行完成后，跳转到"容器镜像服务"控制台页面，单击"我的镜像"，单击"自有镜像"页签，单击[5]中制作的镜像名称"release_image"，即可查看镜像详情。
   
   图6镜像列表页   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002051092706.png)
   
   
 
#### 相关操作
- 关于Maven构建相关常见问题，可参考[Maven构建常见问题](https://support.huaweicloud.com/codeci_faq/codeci_02_0002.html)。
- 关于镜像相关常见问题，可参考[镜像常见问题](https://support.huaweicloud.com/codeci_faq/codeci_faq_0021.html)。
 
