
# 创建/配置/执行流水线
流水线是一个可视化的自动化任务调度平台，需要配置编译构建自动化任务（包括添加业务包构建、IaC自动部署包构建任务）才可完整使用，对这些自动化任务进行自定义编排后，一次配置后即可一键自动化触发调度执行，最终生成代码构建产物，避免频繁低效的手工操作。
#### 前提条件
- 已开通CodeArts服务。
- 已[创建版本](https://support.huaweicloud.com/usermanual-wisestudio/appstage_04_0044.html)。
- AppStage租户需要在华为云上已购买OBS桶（用于存放流水线编译构建的产物），具体操作方法请参见[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)。
 
#### 创建流水线
1. 在开发中心首页下方的"我的团队"区域，选择需要操作的团队卡片，进入该团队空间。 
   如果该团队关联多个服务，可在左侧团队名称右侧单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002179585261.png)切换团队关联的其他服务。也可在左侧团队名称右侧单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002144345934.png)切换其他团队。
   
   
2. 在左侧导航栏选择"流水线管理"。
3. 在"流水线管理"页面，选择服务版本（即[创建版本](https://support.huaweicloud.com/bestpractice-appstage/appstage_04_0044.html)中创建好的版本），单击"关联流水线"，在"关联流水线"面板，根据界面提示单击"立即前往"新建流水线，如[图1]所示。
   
   图1新建流水线   
   ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001775509380.png "点击放大")
   
   
4. 单击"新建流水线"，进入"新建流水线 \> 基本信息"页面，当前服务即为所属项目，填写流水线名称（以"adadss_pipeline"为例），选择流水线源"Repo"，并配置相关参数，流水线源及相关参数说明如[表1]所示。
   
    表1新建流水线参数说明 
   | **流水线源**                                                                           | **参数** **项**          | **说明**                                                                                                                                     |
   |:---|:---|:---|
   | **Repo** 提供企业代码托管的全方位服务，为软件开发者提供基于Git的在线代码托管服务。 | 代码仓                   | 必填项，选择可用的源码仓库（以创建好的"adadss"代码仓为例）。                                                                                                         |
   | **Repo** 提供企业代码托管的全方位服务，为软件开发者提供基于Git的在线代码托管服务。 | 默认分支                  | 必填项，手工或定时执行流水线时默认使用的分支，默认master。                                                                                                           |
   | **Repo** 提供企业代码托管的全方位服务，为软件开发者提供基于Git的在线代码托管服务。 | CodeArts Repo https授权 | 非必填项，配置授权扩展点以提升代码库操作权限，主要用于微服务变更流水线和部分仓库操作插件。                                                                                              |
   | **Repo** 提供企业代码托管的全方位服务，为软件开发者提供基于Git的在线代码托管服务。 | 别名                    | 非必填项，输入别名，则会生成该仓库对应的相关系统参数（可在参数设置页面查看），否则不会生成。 用户选择Repo流水线源时，如果设置了仓库别名，则会在系统预定义参数页面生成该仓库对应的系统参数，否则不生成。 |
      
   
   
5. 配置基本信息完成后，单击"下一步"。 
   进入"新建流水线 \> 选择模板"页面，选择"空模板"，即不使用模板，直接新建。
   
   
6. 单击"确定"，默认进入流水线的"任务编排"页签。 
   在流水线"任务编排"页面，执行后续的配置流水线任务。
   
   
 
#### 配置流水线（添加代码检查任务）
1. 在流水线的"任务编排"页面，单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001938646337.png)或者![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001899246906.png)。
2. 单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001899406746.png)，在"编辑阶段"页面，修改"阶段名称"为"代码检查"，并将"总是运行"设置为"否"（选择"是"，表示流水线执行时，该阶段下的任务默认选中必须执行且不可取消；选择"否"，表示流水线执行时，该阶段下的任务默认选中但可以取消。），然后单击"确定"。
3. 在流水线的"代码检查"阶段，单击"新建任务"。
4. 在"新建任务"页面的右侧区域，选择"代码检查"页签，搜索"CodeArtsCheck代码检查"并将鼠标移至该插件卡片，单击"添加"，将此插件添加到任务中。
5. 在"CodeArtsCheck代码检查"页面右侧区域"请选择需要调用的任务"处单击"点击创建"。
6. 在"新建任务"页面，参照[表2]配置参数信息（此处以创建Repo源码源检查任务为例）。
   
    表2参数说明 
   | **参数项** | **描述**                |
   |:---|:---|
   | 所属项目    | 任务所属项目。默认填写，无需设置。     |
   | 新建方式    | 支持直接新建、基于自定义模板新建。     |
   | 代码源     | 选择Repo，从代码托管拉取代码进行检查。 |
   | 任务名称    | 代码检查任务名称，可自定义。        |
   | 代码仓     | 选择需要检查的代码仓库。          |
   | 默认分支    | 填写需要检查的仓库分支名称。        |
   | 检查语言    | 选择需要检查的代码语言。          |
      
   
   
7. 单击"新建任务"，进入"代码检查详情"页面，单击"开始检查"，即可执行代码检查任务。执行完代码检查任务后，还可以根据需要[查看检查结果](https://support.huaweicloud.com/usermanual-codecheck/codeartscheck_01_7008.html)。
8. 返回[5]的"任务配置"页面，在"请选择需要调度的任务"下拉列表中选择[7]配置完成的代码检查任务，"仓库"在选择调度的任务后，自动关联且不可修改，其他参数无需配置，保持默认即可。
9. 单击"确定"，添加代码检查任务完成。
10. 单击"任务编排"页面右上角"保存"，保存流水线的任务配置。
 
#### 配置流水线（添加业务包构建任务）
1. 在流水线的"任务编排"页面，单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001770388200.png)或者![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001816908281.png)。
2. 单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001770228500.png)，在"编辑阶段"页面，修改"阶段名称"为"构建阶段"，并将"总是运行"设置为"是"（选择"是"，表示流水线执行时，该阶段下的任务默认选中必须执行且不可取消；选择"否"，表示流水线执行时，该阶段下的任务默认选中但可以取消。），然后单击"确定"。
3. 在流水线的"构建阶段"，单击"新建任务"。
4. 在"新建任务"页面的右侧区域，选择"构建"页签，搜索"Build构建"并将鼠标移至该插件卡片，单击"添加"，将此插件添加到任务中。
5. 在"Build构建"页面右侧区域"请选择需要调用的任务"处单击"点击创建"，如[图2]所示。
   
   图2Build构建任务配置   
   ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001817501033.png "点击放大")
   
   
6. 在"新建构建任务"页面的"基本信息"页面，自定义任务名称（以"adadss-build"为例），归属项目默认为当前服务，源码源选择"Repo"，选择对应的代码仓库（以创建好的"adadss"仓库为例）以及分支"master"，单击"下一步"。
7. 在"构建模板"页面，选择"空白构建模板"模板，然后单击"确定"，进入"构建步骤"的"图形化"页签，该页面的"构建环境配置"和"代码下线配置"无需配置，保持默认配置即可。
8. 配置构建步骤"Maven构建"。 
   1. 返回"构建步骤"页签，单击"点击添加构建步骤"，在右侧"添加步骤"页面搜索"Maven构建"，鼠标移至插件卡片并单击"添加"。
   
   2. 执行maven构建命令将业务代码打包，不同项目有所不同。 参考示例：mvn*-Dassembly clean compile package -Dmaven.test.skip=true -U -T4*
      如果某些jar包依赖不到，可将仓库地址添加在setting配置的公有依赖仓库。
      
   
   
   
   
9. 配置镜像构建。 
   1. 登录华为云容器镜像服务控制台，在左侧导航栏选择"我的镜像"，单击右上角"页面上传"，在"页面上传"对话框，创建组织（必须使用华为云账号），单击"选择镜像文件"，选择已经准备好的基础镜像tar包，单击"开始上传"，待任务进度显示"上传完成"，表示镜像文件上传成功。
      基础镜像tar包仅需上传一次，后续可直接从镜像文件列表中选取。
      
   
   2. 在镜像仓库找到[9.a]上传的基础镜像，参照[图3]复制镜像地址。
      图3复制镜像地址   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001839909976.png "点击放大") 
   
   3. 将[9.b]复制的镜像地址粘贴到Dockerfile文件中第一行FROM命令后，如[图4]所示。
      图4将镜像地址粘贴到Dockerfile文件中   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001839760976.png "点击放大") 
   
   4. 返回华为云容器镜像服务控制台镜像列表中单击镜像tar包名称，进入镜像详情页面，选择"Pull/Push指南"页签，单击"操作步骤"中的"生成登录指令"。
   
   5. 在"登录指令"对话框中的"临时登录指令"框的指令末尾处单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001770585066.png)，复制临时登录指令，如[图5]所示。
      图5复制临时登录指令   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001819490305.png "点击放大") 
   
   6. 返回"构建步骤"页面，单击"添加步骤"，在右侧"添加步骤"页面搜索"执行Docker命令"，鼠标移至该插件卡片并单击"添加"。
   
   7. 单击"执行Docker命令"步骤，在右侧"命令"参数下单击"添加"添加docker命令，在"命令"下拉框中选择"login"，参数框中输入"-u cn-north-7@K5X8GVN5B4H4B8KB9SDO -p 1dd00acee886bd05886cded19f5af1cb1e96326e4354fc0f3f493f12a3586518 swr.cn-north-7.myhuaweicloud.com"，登录环境以便Dockerfile文件中可正常获取基础镜像。
   
   8. 在"操作"列单击"+"继续添加docker命令，"命令"下拉框中选择"build"，参数框中输入"-t helloworldservice:23.11.02.1 -f *./deploy_docker/Dockerfile* ."，指定代码仓中的Dockerfile文件，构建镜像。
      工作目录一般为根目录。
      
   
   9. 在"操作"列单击"+"继续添加docker命令，"命令"下拉框中选择"save"，参数框中输入"-o helloworldservice.23.11.02.1.tar helloworldservice:23.11.02.1"，将镜像包保存为tar包。至此，添加docker命令完成，如[图6]所示。
      图6执行docker命令   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001819636389.png "点击放大") 
   
   
   
   
10. 返回"构建步骤"页面，单击"添加步骤"，在右侧"添加步骤"页面搜索"Maven构建"，鼠标移至插件卡片并单击"添加"。执行zip命令，将tar包与业务代码中的package.json文件直接压缩成一个zip包。
    
    参考命令：zip*helloworldservice_23.11.02.1.zip helloworldservice.23.11.02.1.tar package.json*
    
    
11. 继续单击"添加步骤"，添加"上传文件到OBS"插件，在"上传文件到OBS"页面，参照[表3]配置相关参数。
    
     表3"上传文件到OBS"（业务包）步骤配置的参数说明 
    | 参数名称     | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
    |:---|:---|
    | 步骤显示名称   | 构建步骤的名称，默认为"上传文件到OBS"，保持默认或自定义修改均可。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
    | 授权用户     | 在下拉列表选择： - 当前用户：上传到当前租户的OBS桶。  - 其他用户：可以通过选择IAM账号的方式上传到指定租户的OBS桶。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
    | IAM账号    | "授权用户"选择"其他用户"时需配置此参数，配置步骤如下： 1. 单击"管理IAM账号"，进入"服务扩展点管理"页面。  2. 单击"新建服务扩展点"，选择"IAM账户"，弹出"新建服务扩展点"对话框，填写以下参数，补充租户下用户的AK、SK即可： - 连接名称：服务扩展点的名称。例如"obs权限"。  - Access Key Id：访问密钥ID（AK），[获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。  - Secret Access Key：秘密访问密钥（SK），[获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。    3. 信息填写完成，单击"确定"。   |
    | 构建产物路径   | 路径为[10]的zip包的相对路径或输入\*模糊匹配（如"./DemoServiceB/\*.zip"）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
    | 桶名       | 用户自定义构建结果上传到的目标OBS桶名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
    | OBS存储目录  | 用户自定义构建结果在OBS上的存储目录                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
    | OBS存储文件名 | 非必填项，构建结果在OBS上的存储文件名（不包含目录），留空时可上传多个文件，取构建产物文件名为OBS存储文件名；不为空时只能上传单个文件，如application.jar。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
    | 是否上传文件夹  | 非必填项，可选择是否开启上传文件夹。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
    | OBS头域    | 非必填项，上传文件时加入一个或多个自定义的响应头，当用户下载此对象或查询此对象元数据时，加入的自定义响应头会在返回消息的头域中出现。如："键"填写成"x-frame-options"，"值"填写成"false"，即可禁止OBS中存放的网页被第三方网页嵌入。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
       
    
    
12. 单击右上角"新建"，配置构建任务完成。
13. 返回[5]的"任务配置"页面，在"请选择需要调用的任务"下拉列表中选择[12]配置完成的构建任务，"仓库"下拉列表选择[创建代码仓库](https://support.huaweicloud.com/bestpractice-appstage/appstage_09_0023.html)中已创建的仓库，其他参数无需配置，保持默认即可。
14. 单击"确定"，添加业务包构建任务完成。
15. 单击"任务编排"页面右上角"保存"，保存流水线的任务配置。
 
#### 配置流水线（添加IaC自动部署包构建任务）
1. 在流水线的"任务编排"页面的"构建阶段"，单击![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001772805912.png)。
2. 在"新建任务"页面的右侧区域，选择"构建"页签，搜索"Build构建"插件并将鼠标移至该插件卡片，单击"添加"，将此插件添加到任务中。
3. 在"Build构建"页面右侧区域，设置IaC自动部署包构建任务"名称"（如设置名称为"Build构建_IaC"），在"请选择需要调用的任务"处单击"点击创建"。
4. 在"新建构建任务 \> 基本信息"页面，自定义任务名称（以"adadss-build-IaC"为例），归属项目默认为当前服务，源码源选择"Repo"，选择对应的代码仓库（例如"adadss"）以及分支"master"，单击"下一步"。
5. 在"新建构建任务 \> 构建模板"页面，选择"空白构建模板"模板，然后单击"确定"，进入"构建步骤"的"图形化"页签，该页面的"构建环境配置"和"代码下线配置"无需配置，保持默认配置即可。
6. 返回"构建步骤"页签，单击"点击添加构建步骤"，在右侧"添加步骤"页面搜索"Maven构建"后单击"添加"。
7. 在右侧"Maven构建"页面的命令窗口，输入如下示例的构建命令，以[图7]示例，参考示例命令：4mvn"-am -pl iacspec -Dassembly clean compile package -Dmaven.test.skip=true -U -T4"，通过执行指定目录下的pom.xml文件将HelloWorld文件夹下的文件压缩成zip文件。
   
   [图7]中"build.sh"、"app_define.json"、"iacspec.xml"、"pom.xml"这些文件为自定义的脚本文件。
   图7压缩zip包   
   ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000001815263569.png "点击放大")
   
   
8. 继续单击"添加步骤"，在右侧"添加步骤"页面搜索"上传文件到OBS"，鼠标移至该插件单击"添加"将其添加到构建步骤中。
9. 单击"上传文件到OBS"步骤，在"上传文件到OBS"页面，参照[表4]配置相关参数。
   
    表4"上传文件到OBS"（IaC自动部署包）步骤配置的参数说明 
   | 参数名称     | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | 步骤显示名称   | 构建步骤的名称，默认为"上传文件到OBS"，保持默认或自定义修改均可。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 授权用户     | 在下拉列表选择： - 当前用户：上传到当前租户的OBS桶。  - 其他用户：可以通过选择IAM账号的方式上传到指定租户的OBS桶。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | IAM账号    | "授权用户"选择"其他用户"时需配置此参数，配置步骤如下： 1. 单击"管理IAM账号"，进入"服务扩展点管理"页面。  2. 单击"新建服务扩展点"，选择"IAM账户"，弹出"新建服务扩展点"对话框，填写以下参数，补充租户下用户的AK、SK即可： - 连接名称：服务扩展点的名称。例如"obs权限"。  - Access Key Id：访问密钥ID（AK），[获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。  - Secret Access Key：秘密访问密钥（SK），[获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。    3. 信息填写完成，单击"确定"。   |
   | 构建产物路径   | 路径为[7]的zip包的相对路径或输入\*模糊匹配（如"./DemoServiceB/\*.zip"）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 桶名       | 用户自定义构建结果上传到的目标OBS桶名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | OBS存储目录  | 用户构建结果在OBS上的存储目录。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | OBS存储文件名 | 非必填项，构建结果在OBS上的存储文件名（不包含目录），留空时可上传多个文件，取构建产物文件名为OBS存储文件名；不为空时只能上传单个文件，如application.jar。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 是否上传文件夹  | 非必填项，可选择是否开启上传文件夹。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | OBS头域    | 非必填项，上传文件时加入一个或多个自定义的响应头，当用户下载此对象或查询此对象元数据时，加入的自定义响应头会在返回消息的头域中出现。如："键"填写成"x-frame-options"，"值"填写成"false"，即可禁止OBS中存放的网页被第三方网页嵌入。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      
   
   
10. 单击右上角"保存"，配置IaC自动部署包构建任务完成。
11. 返回[3]的"任务配置"页面，在"请选择需要调用的任务"下拉列表中选择[10]配置完成的IaC自动部署包构建任务，"仓库"下拉列表选择[创建代码仓库](https://support.huaweicloud.com/bestpractice-appstage/appstage_09_0023.html)中已创建的仓库，其他参数无需配置，保持默认即可。
12. 单击"确定"，添加IaC自动部署包构建任务完成。
13. 单击"任务编排"页面右上角"保存"，保存流水线的任务配置。
 
#### 关联流水线
1. 返回开发中心的"流水线管理"页面，单击右上角"关联流水线"。
2. 在"关联流水线"页面，勾选已创建和配置完成的流水线（以"adadss_pipeline"为例）。
3. 单击"确定"。所选流水线与当前服务版本绑定。
 
#### 执行流水线
1. 在当前服务版本的流水线列表中已关联的流水线所在行的"操作"列，单击"执行"。
2. 在"执行构建"对话框，单击"确定"，流水线开始构建版本的发布软件包。 
   - 在流水线进行中，单击"操作"列"终止"可停止构建。
   
   - 一个版本可多次重复执行发布构建，但以最后一次的构建结果为准。
   
   
   
   
 
#### 版本基线化
执行基线化的前提是流水线已成功执行完成。
1. 在开发中心首页下方的"我的团队"区域，选择需要操作的团队卡片，进入该团队空间。 
   如果该团队关联多个服务，可在顶部切换团队关联的其他服务。也可在顶部切换其他团队。
   
   
2. 在左侧导航栏选择"版本管理"，在"版本管理"页面的版本列表中，单击版本号，进入版本详情页面。
3. 在版本详情页面的"版本持续交付"区域，选择"持续开发 \> 版本基线化"。
4. 在"版本基线化"页面，单击"添加基线化软件包"（最多可添加8个基线化软件包），弹出"添加基线化软件包"页面。
5. 在"选择流水线"下拉列表选择流水线，确认最近一次发布构建信息。
6. 单击右下角"基线化"。开发中心后台将记录流水线发布构建的软件包的存储路径，用于版本发布时获取。 
   在"版本基线化"页面"版本基线化信息"区域，可查看相应流水线详情，在"软件包列表"中可查看流水线构建的软件包相关信息（如文件位置、文件大小等）。
   
   
 
