
# CICD持续集成与交付
#### 使用说明
AstroZero通过对接软件开发生产线（CodeArts）和代码托管（CodeArts Repo），提供应用代码托管、代码检查、代码编译、验证、部署、发布功能，实现软件持续集成（Continuous Integration，简称CI）和持续交付（Continuous Delivery，简称CD）。
- 软件开发生产线（CodeArts）是集华为近30年研发实践、前沿研发理念、先进研发工具为一体的一站式云端DevOps平台，面向开发者提供的云服务，即开即用，让开发者快速而又轻松地开启云端开发之旅。更多介绍，请参见[软件开发生产线（CodeArts）产品文档](https://support.huaweicloud.com/devcloud/index.html)。
- 代码托管CodeArts Repo（原CodeHub）源自华为千亿级代码管理经验，基于Git，提供企业代码托管的全方位服务，为软件开发者提供基于Git的在线代码托管服务，包括代码克隆/下载/提交/推送/比较/合并/分支/Code Review等功能。更多介绍，请参见[代码托管（CodeArts Repo）帮助文档](https://support.huaweicloud.com/codeartsrepo/index.html)。
 
#### 场景描述
将在AstroZero开发环境中，开发的某些应用元数据上传到云端代码仓库中进行托管，解决软件开发者跨地域协同、多分支并发、代码版本管理、安全性等方面的问题。通过创建自动交付流水线，完成代码检查、编译构建和部署任务，将这些应用打包成资产包，部署到其他AstroZero环境。
#### 操作流程
CICD持续集成与交付的基本操作流程，如图[图1]所示。
图1操作流程图   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125301.png)
#### 步骤1：开通CodeArts服务并完成前置操作
1. 开通软件开发生产线（CodeArts）服务。 
   使用华为账号或拥有[DevCloud Console FullAccess权限](https://support.huaweicloud.com/productdesc-devcloud/devcloud_pdtd_00006.html)的IAM用户账号（配置权限策略方法请参考[创建用户并授权使用软件开发平台控制台](https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0003.html)），访问CodeArts，区域请选择"**华北-北京四**"。请根据需求选择规格，这里选择"基础版"，按照提示开通软件开发生产线服务。
   
   
2. 创建项目。 
   1. 在CodeArts控制台的总览页面，单击"立即使用"。
   
   2. 在项目模板中，将鼠标放在Scrum上，单击"选用"。 如果已有项目，可在"所有项目"中，选择"新建项目"。
      
   
   3. 设置项目名称为"testSH"，单击"确定"。
   
   
   
   
3. 添加项目成员。 
   1. 在所有项目页面，单击已创建项目上的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045952.png)，选择"设置"，进入项目设置页面。
      图2设置   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285089.png "点击放大") 
   
   2. 在左侧导航栏中，选择"成员管理"，单击"添加成员"。
   
   3. 根据自身业务需求，选择添加用户的方式（本示例选择"从本企业用户"）。
      图3选择从本企业用户   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125309.png "点击放大") 
   
   4. 在添加成员页面，选择对应的用户，单击"下一步"。
      图4勾选用户   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045932.png "点击放大") 
   
   5. 根据需要，设置项目角色（本示例设置为"项目经理"）。
      图5设置项目角色   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045940.png "点击放大") 
   
   6. 设置完成后，单击"保存"。
   
   
   
   
4. 在"testSH"项目中，新建代码仓库。
   
   1. 在主菜单中，选择"服务 \> 代码托管"，进入代码托管页面。
   
   2. 单击"普通新建"，设置代码仓库名称为"testSH1"，其它参数保持默认，单击"确定"。
   
   3. 在代码仓库列表中，单击已创建的代码仓库"testSH1"。
   
   4. 单击页面右上角的"克隆/下载"，选择"用HTTPS克隆"，单击URL后的复制图标。
      请记录该地址，该地址为代码仓库的HTTPS方式访问地址。
      图6用HTTPS克隆   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125265.png) 
   
   
   
   
 
#### 步骤2：在AstroZero上配置代码库
代码仓库用于项目代码的版本管理，在代码托管前，需要在AstroZero上配置代码库对接信息。若需要将不同服务区域（跨地域协同开发场景）的AstroZero开发环境的应用元数据归档，则需要在各个AstroZero开发环境中配置代码库。
AstroZero支持以下两种托管方式，请根据需要选择一种方式配置代码库：
- 租户级代码库托管：通过配置整个租户的代码仓库（华为云 CodeArts Repo）。配置后，租户开发的应用元数据可以同步到代码仓库，提供历史变更记录、对比等版本管理能力。
  1. 参考[如何进入经典开发环境](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0003.html#section1)中操作，开发者登录要进行应用代码托管的AstroZero开发环境，在首页上方单击"管理"，进入经典版管理中心。
  
  2. 在左侧导航栏中，选择"系统管理 \> 代码库配置"。
  
  3. 在右侧租户级代码库配置页面，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045948.png)，参考[表1]设置对接参数，单击"保存"。
     图7配置对接参数   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125245.png "点击放大")
      表1代码仓参数说明 
     | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     |:---|:---|
     | 仓库地址 | 配置为[4.d]中，记录的代码仓库HTTPS方式访问地址。                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     | 分支   | 归档代码用到的仓库分支，默认为"master"。 1. 使用代码仓库成员的IAM账号，访问CodeArts。  2. 在左侧菜单栏中，选择"代码托管"。  3. 在仓库列表中，单击仓库名。  4. 在"分支"页签，查看当前分支取值，默认为"master"。   |
     | 租户名  | 开通代码托管服务的华为账号。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     | 用户名  | 设置为仓库成员的IAM用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     | 密码   | IAM用户登录华为云的登录密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
        
     
   
- 项目级代码库托管：以应用为维度，通过配置某个应用的代码仓库，将某应用元数据可以同步到代码仓库，提供历史变更记录、对比等版本管理能力。
  1. 开发者登录要进行应用代码托管的AstroZero经典版开发环境，单击某一需要归档代码的应用，进入应用开发页面。
  
  2. 在左侧选择![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886528.png)，单击右上的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045988.png)。
     若之前未绑定过代码库，请参考[图9]，配置应用代码仓。
     图8应用代码仓设置入口   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125289.png "点击放大")
     图9初次配置代码仓   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886580.png "点击放大") 
  
  3. 在弹出的确认页面，确认后单击"确定"。
  
  4. 参考[表1]，配置项目级代码仓库。
     其中，"忽略测试脚本"表示是否忽略脚本名以"_test"结尾的脚本，该脚本为开发者在开发应用时创建的测试脚本，脚本命名时以"_test"结尾。勾选表示忽略，勾选后，"_test"结尾的脚本不会归档至代码仓中。
     图10项目级代码仓库配置   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285101.png "点击放大") 
   
 
 #### 步骤3：进行代码托管
将AstroZero上开发的应用代码元数据归档到代码仓库。这里以归档某开发环境某个应用为例进行说明，您可对多个配置代码库的AstroZero环境的多个应用进行代码托管。
1. 返回AstroZero经典版开发环境首页，单击某一需要归档代码的应用，进入应用开发页面。
2. 参考[图11]和[图12]，在左侧单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886524.png)。
   
   首次归档应用代码，所有代码显示在"未暂存的更改"下，单击后面的"+"，再单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045928.png)。设置归档描述信息，单击"确认"，即可归档该应用所有代码。支持选择部分代码归档，在需要归档的代码目录后，单击"+"进行操作即可。
   图11归档代码   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045944.png "点击放大")
   图12设置归档描述   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886520.png "点击放大")
   
   
3. 单击"源代码管理"后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045992.png)，打开代码仓库首页。
   
   图13提交代码   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045968.png "点击放大")
   
   
4. 在代码仓库"文件"页签下，单击"Application"，可查看应用的归档代码。 
   图14查看归档应用   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045996.png "点击放大")
   图15查看应用代码   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886592.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   代码仓库"提交网络"页签是以流向图的形式展现了某条分支或标签的整个提交（commit）历史（包括动作、时间、提交者、提交系统生成备注和手动填写备注）以及提交历史的关系。
   
   
 
#### 步骤4：配置流水线
流水线提供可视化、可定制的自动交付流水线，支持代码检查、编译构建、部署等多种任务类型。更多关于流水线说明，请参见[流水线官网文档](https://support.huaweicloud.com/cloudpipeline/index.html)。
1. 使用华为账号访问CodeArts，区域选择"华北-北京四"。
2. 在左侧菜单栏中，选择"所有项目"，在项目列表中单击项目名，进入项目详情页面。
3. 在左侧导航栏中，选择"持续交付 \> 流水线"，进入流水线。
4. 创建流水线。 
   1. 单击"新建流水线"，进入新建流水线页面。
   
   2. 在"流水线源"中，选择流水线源"Repo"、选择[4]中创建的仓库、默认分支"master"，单击"下一步"。
   
   3. 在"模板选择"中，选择系统预置的"应用魔方编译部署"模板，单击"确定"，进入工作流配置页面。 其中，代码检查任务中已预置好TypeScript代码检查任务，不需要再自定义修改。
      
   
   
   
   
5. 配置流水线。 
   1. 在工作流配置页面，单击"构建任务"中的任务，记录任务名称，也可自定义任务名称并记录下来。
      编译构建任务名称和发布任务的名称是一致的，在部署任务中会用到该名称，用于标识从哪个发布任务中获取部署需要的应用包。
      
   
   2. 在"参数设置 \> 自定义参数"中，配置流水线参数。 通过将流水线参数传递给各个任务使用，实现了任务间数据流动的统一，用户只需要配置好流水线参数，即可完成编译构建、部署、测试等任务的数据拉通。
      图16自定义参数   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933046000.png "点击放大")
      表2参数说明 
      | 参数                | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      |:---|:---|
      | codeBranch        | 代码所属的仓库分支。 - 字符串类型参数。  - 默认值为"master"。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。                                                                                                                                       |
      | releaseVersion    | 流水线版本号。 - 自增长类型参数。  - 默认值不用配置，每全新执行一次流水线后，下次执行时该参数值末位数字会自动+1。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。                                                                                                       |
      | packageName       | 发布后包的名称。 - 字符串类型参数。  - 需要自定义默认值，取值为发布后包的名称。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。                                                                                                                                        |
      | repoName          | "编译构建"中的任务名称。 - 字符串类型参数。  - 需要自定义默认值，取值为[5.a]中的任务名称。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。                                                                                      |
      | appcubeDomianName | 需要部署应用的AstroZero环境域名。 - 字符串类型参数。  - 需要自定义默认值，配置为需要部署应用的AstroZero环境域名，例如域名为"https://appcuberun.cn-north-4.huaweicloud.com"。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。                                                |
      | appNames          | 编译发布的应用包名称，即[步骤3：进行代码托管]中托管到代码仓库中的应用名称。 - 字符串类型参数。  - 需要自定义默认值，配置为代码仓库中的应用名称。如果打包所有应用，则配置为"all"；如果配置为多个应用，应用名称之间用英文空格间隔。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。   |
      | boNames           | 编译发布的BO包名称，即[步骤3：进行代码托管]中托管到代码仓库中的BO名称。 - 字符串类型参数。  - 需要自定义默认值，配置为代码仓库中的BO名称。如果打包所有BO，则配置为"all"；如果配置为多个BO，BO名称之间用英文空格间隔。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。   |
      | complileOptions   | 表示在安装应用包时，在导入实例化配置数据之前或者之后执行的脚本。 - 字符串类型参数。  - 默认值不用配置，在提交代码，在AstroZero平台打包设置的参数配置会自动提交过来。例如，值为preInstallHandler=*安装前置脚本名称* ,postInstallHandler=*安装后置脚本名称*。  - 不是私密参数。  - 打开"运行时设置"开关，表示单独执行构建任务时支持变更参数值，并且也会把该参数上报流水线。  - 状态为"已使用"，记录参数已被使用。       |
         
      
   
   3. 在页面左上角根据需要修改流水线名称，名称中建议携带发布部署的应用名和AstroZero环境实例名。
   
   4. 设置完成后，单击"保存"。
   
   
   
   
6. 新增参数。 
   1. 在项目页面，单击左侧导航栏中的"持续交付 \> 编译构建"，进入编译构建页面。
   
   2. 根据[5.a]中记录的任务名称搜索任务，单击搜索到的任务名。
   
   3. 单击对应任务后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045920.png)，选择"编辑任务"。
   
   4. 在"参数设置"页签，单击"添加"，新增[图17]和[表3]中两个参数。
      图17新增参数   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285037.png "点击放大")
       表3新增参数说明 
      | 参数           | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
      |:---|:---|
      | clientId     | 在AstroZero环境上部署应用需要调用AstroZero的接口，这里需要配置通过"客户端模式"OAuth鉴权的客户端ID。 - 字符串类型参数。  - 需要自定义默认值，配置为"客户端模式"OAuth鉴权的客户端ID，即client_id，获取方法请参考[客户端模式接入认证](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_0042.html#section1)。  - 设置为**私密参数**。参数为私密参数时，系统会将输入参数做加密存储，使用时进行解密，同时在运行日志里不可见。  - 关闭"运行时设置"开关。   |
      | clientSecret | 在AstroZero环境上部署应用需要调用AstroZero的接口，这里需要配置通过"客户端模式"OAuth鉴权的客户端鉴权密钥。 - 字符串类型参数。  - 需要自定义默认值，配置为"客户端模式"OAuth鉴权的客户端鉴权密钥，即client_secret，获取方法请参考[客户端模式接入认证](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_0042.html#section1)。  - 设置为**私密参数**。参数为私密参数时，系统会将输入参数做加密存储，使用时进行解密，同时在运行日志里不可见。  - 关闭"运行时设置"开关。     |
         
      
   
   5. 设置完成后，单击"保存"。
   
   
   
   
7. 返回项目页面，在左侧导航栏中选择"持续交付 \> 流水线"，进入流水线。
8. 单击流水线名称，进入流水线详情页面，单击"全新执行"，一键执行流水线。
9. 执行完成后，查看执行结果。 
   - 单击构建任务旁的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045956.png)，可以下载通过流水线自动构建出来的构建包。
   
   - 单击任务旁的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285109.png)，可以查看该任务的执行日志。
   
   - 单击任务旁的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045912.png)，可以单独执行该任务。
   
   
   
   
10. 登录部署应用的AstroZero环境，检查是否部署完成。 
    - 若部署的环境为其他开发环境，应用会显示在开发环境首页的"库"页签下。
    
    - 若部署的环境为运行环境，登录AstroZero管理中心，在左侧导航栏中，选择"应用管理 \> 应用导航"，可查看到已部署的应用。
    
    
    
    
 
#### 扩展知识
[步骤3：进行代码托管]中是以界面操作方式提交应用代码至代码仓库，AstroZero还支持在开发者控制台中以命令行的方式提交应用代码。在应用开发工作台的导航菜单上，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045924.png)，弹出控制台页面。输入"code help"，可查看相关命令行使用说明。
图18控制台入口   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285045.png)
图19开发者控制台   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285065.png "点击放大")
