
# HE2E DevOps实践之构建应用
本文以["DevOps全流程示例项目"](https://support.huaweicloud.com/bestpractice-devcloud/devcloud_practice_20072.html)为例，介绍如何在项目中配置构建任务，以及通过代码变更触发自动构建来实现持续集成。
开展实践前，需要完成[代码检查](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1003.html)。
#### 预置任务简介
样例项目中预置了以下5个构建任务。
表1预置任务 
| 预置任务                     | 任务说明             |
|:---|:---|
| phoenix-sample-ci        | 基本的构建任务。         |
| phoenix-sample-ci-test   | 构建测试环境可用镜像的任务。   |
| phoenix-sample-ci-worker | 构建Worker功能镜像的任务。 |
| phoenix-sample-ci-result | 构建Result功能镜像的任务。 |
| phoenix-sample-ci-vote   | 构建Vote功能镜像的任务。   |
   
本章节以任务"phoenix-sample-ci"为例进行讲解，任务内置的步骤及作用如下表所示，用户完成任务的参数配置后即可执行该任务。
表2构建步骤 
| **构建步骤**                        | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|
| 制作Vote镜像并推送到SWR仓库               | 根据文件"vote/Dockerfile"制作Vote功能镜像，并将镜像推送到SWR服务中保存。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 制作Result镜像并推送到SWR仓库             | 根据文件"result/Dockerfile"制作并推送Result功能镜像，并将镜像推送到SWR服务中保存。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| 使用Maven安装Worker依赖包              | 使用Maven安装Worker功能所需的依赖。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| 制作Worker镜像并推送到SWR仓库             | 根据文件"worker/Dockerfile"制作并推送Worker功能镜像，并将镜像推送到SWR服务中保存。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| 生成Postgres and Redis Dockerfile | 通过shell命令生成文件"Dockerfile"，用以制作Postgres（数据库）和Redis（缓存）镜像。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 制作Postgres镜像并推送到SWR仓库           | 根据"生成Postgres and Redis Dockerfile"步骤中所生成的Dockerfile文件制作Postgres镜像，并将镜像推送到SWR服务中保存。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 制作Redis镜像并推送到SWR仓库              | 根据"生成Postgres and Redis Dockerfile"步骤中所生成的Dockerfile文件制作Redis镜像，并将镜像推送到SWR服务中保存。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 替换Docker-Compose部署文件镜像版本        | 为了将镜像部署到ECS时，能够拉取到正确的镜像，使用shell命令完成以下操作。 - 使用sed命令，依次将文件"docker-compose-standalone.yml"中的参数替换为构建任务的参数"dockerServer"、"dockerOrg"、"BUILDNUMBER"的值。  - 使用tar命令，将文件"docker-compose-standalone.yml"压缩为"docker-stack.tar.gz"，将部署所需文件进行打包，以便于后续步骤将该文件上传归档。                                             |
| 替换Kubernetes部署文件镜像版本            | 为了将镜像部署到CCE时，能够拉取到正确的镜像，使用shell命令完成以下操作。 - 使用sed命令，将目录"kompose"下所有以"deployment"结尾的文件中的"docker-server"、"docker-org"，替换为构建任务的参数"dockerServer"、"dockerOrg"的值。  - 使用sed命令，依次将文件"result-deployment.yaml"、"vote-deployment.yaml"、"worker-deployment.yaml"中的"image-version"替换为构建任务的参数"BUILDNUMBER"的值。   |
| 上传Kubernetes部署文件到软件发布库          | 将"替换Kubernetes部署文件镜像版本"步骤中修改后的所有".yaml"文件上传到软件发布库中归档。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 上传docker-compose部署文件到软件发布库      | 将"替换Docker-Compose部署文件镜像版本"步骤中压缩好的"docker-stack.tar.gz"上传到软件发布库中归档。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
 #### 配置SWR服务
1. 登录[SWR控制台](https://console.huaweicloud.com/swr)。
2. 单击"登录指令"，页面弹框显示登录指令。 
   其中，
   - "-u"之后的字符串为用户名。
   
   - "-p"之后的字符串为密码。
   
   - 最后的字符串为SWR服务器地址。
   
   
   图1登录指令   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002541851971.png)
   ![](https://support.huaweicloud.com/bestpractice-codeci/public_sys-resources/note_3.0-zh-cn.png)
   此处生成的登录指令为临时登录指令，有效期为24小时。如果需要长期有效的登录指令，请参见[获取长期有效登录或推拉镜像指令](https://support.huaweicloud.com/usermanual-swr/swr_01_1000.html)。
   
   
3. 单击"创建组织"，在弹框中输入组织名称"phoenix"（如果页面提示"组织已存在"，请自定义其他名称），单击"确定"。 
   新建成功后，在左侧导航栏中单击"组织管理"，在组织管理页面中显示已创建的组织。
   图2组织管理   
   ![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002513107761.png)
   
   
 
#### 配置并执行任务
1. 进入项目"凤凰商城"，单击导航"持续交付 \> 编译构建"，进入编译构建服务。
2. 在任务"phoenix-sample-ci"的操作"列中单击![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002285287960.png)，选择"编辑"。
3. 选择"参数设置"页签，配置以下参数值。 
   表3参数设置 
   | 参数名称         | 默认值                                                                    |
   |:---|:---|
   | codeBranch   | master。                                                                |
   | dockerOrg    | 输入在[配置SWR服务]中创建的组织名称。    |
   | version      | 1.0.0                                                                  |
   | dockerServer | 输入在[配置SWR服务]获取的SWR服务器地址。 |
      
   
   
4. 单击"保存并执行"，在弹框中单击"确定"，启动构建任务。
   
   当页面中显示![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002275307994.png)时，表示任务执行成功。请记录以"#"开头的字符串（例如![](https://support.huaweicloud.com/bestpractice-codeci/zh-cn_image_0000002275251178.png)）。
   如果构建失败，请根据失败步骤信息与日志中的报错信息，参考[编译构建常见问题](https://support.huaweicloud.com/codeci_faq/codeci_02_0001.html)排查处理。
   其中，如果报错信息为"制作Docker镜像失败"，请优先参考[拉取镜像失败导致构建失败](https://support.huaweicloud.com/bestpractice-devcloud/devcloud_practice_2014.html)处理。
   
   
5. 检查发布件。 
   1. 单击导航"制品仓库 \> 软件发布库"，进入软件发布库。
   
   2. 在与项目同名的仓库中，可以找到"docker-stack"、"phoenix-sample-ci"两个文件夹。
      - 在"docker-stack"文件夹中，可找到与[4]中记录的字符串同名的文件夹，在此文件夹中可以找到发布件"docker-stack.tar.gz"。
      
      - 在文件夹"phoenix-sample-ci/1.0.0"中，可以找到归档的10个".yaml"格式文件。
       
   
   3. 进入容器镜像服务，在导航中选择"组织管理"，单击在[配置SWR服务]中创建的组织名称。
      选择"镜像"页签，可以在列表中找到5个镜像"redis"、"postgres"、"worker"、"result"、"vote"。
      
   
   4. 依次在列表中单击5个镜像的名称进入详情页。在"镜像版本"页签中查看镜像版本。
      - redis的镜像版本为"alpine"。
      
      - postgres的镜像版本为"9.4"。
      
      - worker、result、vote的镜像版本均与在[4]中记录的字符串相同。
       
   
   
   
   
 
