
# CAE对接GitHub Actions实现自动CICD部署
在现代软件开发流程中，持续集成和持续部署（CICD）是提高开发效率、保证软件质量的重要手段。将CAE与GitHub Actions进行对接，能够实现代码的自动化构建、测试和部署，极大地简化部署流程，减少人为错误，加快软件交付速度。
#### 前提条件
1. 已[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)，并登录成功。
2. 已在CAE控制台创建好项目、环境、应用和组件，并获取到相应的ID。请参考[快速体验CAE](https://support.huaweicloud.com/qs-cae/cae_02_0001.html)来创建环境、应用和组件，请参考[获取项目ID、区域ID、环境ID、应用ID和组件ID]来获取ID信息。
3. 在[GitHub](https://github.com/)官网注册账号，并创建一个GitHub仓库，配置好代码版本管理。
4. 生成并妥善保管华为云的访问密钥ID（Access Key ID，AK）和访问密钥（Secret Access Key，SK），在本章节中需要将其配置为GitHub仓库的Secrets。请参考[如何获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)来获取AK和SK。
5. 已获取容器镜像服务的镜像仓库的登录指令，在本章节中需要将其配置为GitHub仓库的Secrets。请参考[获取长期有效登录或推拉镜像指令](https://support.huaweicloud.com/usermanual-swr/swr_01_1000.html)获取登录指令。
 
#### CICD操作流程
CICD持续集成与交付的基本操作流程如下：
![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268926557.png)
1. **持续集成（CI）** :
   - 当开发人员将代码推送到主分支（或指定分支）时，GitHub Actions会自动触发。
   
   - 进行代码的构建，生成可部署的工件（如容器镜像）。对于容器化的应用，使用Dockerfile构建镜像，并将其推送到容器镜像仓库（如本章节的示例配置中的swr.me-east-1.myhuaweicloud.com）。
    
2. **持续部署（CD）** :
   - 在CI成功完成后，触发CD流程。
   
   - 使用配置好的huaweicloud/cae-deploy@main插件，将构建好的镜像部署到指定的CAE环境中，并等待任务执行完成。
    
 
#### GitHub Actions插件配置参数说明
以下是配置参数的详细说明：
| 参数名称              | 参数说明                                                                                                                                                                                                                                                    |
|:---|:---|
| ak                | 华为云的访问密钥ID（Access Key ID，AK），用于身份验证。                                                                                                                                                                                                                    |
| sk                | 访问密钥ID对应的访问密钥（Secret Access Key，SK），用于身份验证。                                                                                                                                                                                                             |
| project-id        | 需要部署CAE组件对应的华为云账号的项目ID。                                                                                                                                                                                                                                 |
| region-id         | 华为云的区域ID。在本示例中的区域为me-east-1。                                                                                                                                                                                                                            |
| environment-id    | 部署的目标环境ID。                                                                                                                                                                                                                                              |
| application-id    | 应用的ID。                                                                                                                                                                                                                                                  |
| component-id      | 组件的ID。                                                                                                                                                                                                                                                  |
| image-address     | 容器镜像的地址，用于指定要部署的镜像。 格式：swr.\[区域项目名称\].myhuaweicloud.com/\[组织名称\]/\[镜像名称\]:\[版本名称\]，区域项目名称就是region-id。 在本章节的示例中，image-address为"swr.me-east-1.myhuaweicloud.com/demo-cae/cae-frontend:1.0.0"。 |
| component-version | 组件的版本号，便于版本管理和回滚。                                                                                                                                                                                                                                       |
   
#### 步骤一：配置GitHub Actions的Secrets
为了安全地使用访问密钥和其他敏感信息，需要在GitHub仓库中配置Secrets。
在本章节中，需要将访问密钥ID、访问密钥（Secret Access Key，SK）和镜像仓库的登录指令添加到GitHub Actions的Secrets中。
配置完成后，GitHub Actions在运行时就可以通过**${{ secrets.HUAWEI_SECRET_ACCESS_KEY }}** 、**${{ secrets. HUAWEI_SECRET_SECRET_KEY }}** 和**${{ secrets. HUAWEI_DOCKER_SECRE }}**来获取对应的敏感信息，而不会在配置文件中暴露这些信息。
1. 进入GitHub仓库，单击页面上方的"Settings"页签。
2. 在左侧导航栏中，单击"Secrets and variables"，然后选择"Actions"。
3. 单击"New repository secret"创建名称为**HUAWEI_SECRET_ACCESS_KEY** 的secret：
   
   在"Name"字段中输入HUAWEI_SECRET_ACCESS_KEY，在"Secret "字段中输入实际的华为云访问密钥ID，然后单击"Add secret"。
   
   
4. 再次单击"New repository secret"创建名称为**HUAWEI_SECRET_SECRET_KEY** 的secret：
   
   在"Name"字段中输入HUAWEI_SECRET_SECRET_KEY，在"Secret "字段中输入实际的华为云访问密钥，然后单击"Add secret"。
   
   
5. 再次单击"New repository secret"创建名称为**HUAWEI_DOCKER_SECRET** 的secret：
   
   在"Name"字段中输入HUAWEI_DOCKER_SECRET，在"Secret "字段中输入实际的SWR登录密钥，然后单击"Add secret"。
   
   
6. 全部创建完成后，可以在Repository secrets列表中查看刚才创建的secret信息。 
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268886485.png "点击放大")
   
   
 
#### 步骤二：配置GitHub Actions工作流文件，查看运行结果
以下示例展示使用华为云CLI配置GitHub Actions工作流文件，用于自动化构建、测试、打包Node.js应用并将其部署CAE。实际配置过程中，需根据实际情况调整。
```
name: Node.js Package
 
on:
  push:
    branches:
      - master
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          cache: npm
          cache-dependency-path: node_modules/.package-lock.json
          node-version: 16
      
      - name: npm install and build
        run: |
          chmod 777 node_modules/.bin/vue-cli-service
          npm install
          npm run build
      
      - name: npm install and build
        run: |
          chmod 777 node_modules/.bin/vue-cli-service
          npm install
          npm run build
      
      - name: build images
        run: docker build -t cae-frontend:1.0.0 .
 
      - name: Login to SWR
        run: docker login -u me-east-1@${{ secrets.HUAWEI_SECRET_ACCESS_KEY}} -p ${{ secrets.HUAWEI_DOCKER_SECRET }} swr.me-east-1.myhuaweicloud.com
 
      - name: Push to SWR
        run: |
          docker tag cae-frontend:1.0.0 swr.me-east-1.myhuaweicloud.com/demo-cae/cae-frontend:1.0.0
          docker push swr.me-east-1.myhuaweicloud.com/demo-cae/cae-frontend:1.0.0
      # 下载并安装华为云 CLI
      - name: Install HuaweiCloud CLI
        run: |
          curl -sSL https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o ./hcloud_install.sh && sudo bash ./hcloud_install.sh -y
      # 配置华为云 CLI
      - name: Configure HuaweiCloud CLI
        run: |
          sudo hcloud configure set --cli-profile=testAKSK --cli-mode=AKSK --cli-region=me-east-1 --cli-access-key={{ secrets.HUAWEI_SECRET_ACCESS_KEY}} --cli-secret-key={{ secrets.HUAWEI_SECRET_SECRET_KEY}} --cli-project-id=00248baf96984aecac0f8a976fa7ac00 --cli-domain-id=5a9e34472c434dcabaf1d0c0d51e4efd --cli-read-timeout=20 --cli-connect-timeout=10
      # 部署到华为云 CAE
      - name: Deploy to CAE
        id: cli-command
        run: |
          echo y | sudo hcloud CAE ExecuteAction --cli-region="me-east-1" --project_id="00248baf96984aecac0f8a976fa7ac00" --X-Enterprise-Project-ID="0" --X-Environment-ID="811db361-727e-4b57-b247-584433244394" --application_id="8f179f8e-f914-4ae2-bbe8-c629973c7f50" --component_id="4b3998c3-9771-4337-a653-d90132d2dd77" --api_version="v1" --kind="Action" --metadata.name="upgrade" --metadata.annotations.version="1.0.0" --spec.source.type="image" --spec.source.url="swr.me-east-1.myhuaweicloud.com/demo-cae/cae-frontend:1.0.0"
      - name: Print CLI command result
        run: |
          echo "华为云 CLI 命令的返回结果: ${{ steps.cli-command.outputs.result }}"
```
查看运行结果：
![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002233807286.png "点击放大")
 #### 获取项目ID、区域ID、环境ID、应用ID和组件ID
请参考下表获取项目ID（project-id）、区域ID（region-id）、环境ID（environment-id）、应用ID（application-id）和组件ID（component-id）。
| ID名称 | 获取方式                                                                                                                                                                                                                                                              |
|:---|:---|
| 项目ID | 登录管理控制台，鼠标悬浮在右上角登录用户名上，在下拉菜单选择"我的凭证"。 在API凭证页面的"项目列表"中，在项目ID列查看项目ID。 ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268926569.png "点击放大")                                  |
| 区域ID | 登录管理控制台，鼠标悬浮在右上角登录用户名上，在下拉菜单选择"我的凭证"。 在API凭证页面的"项目列表"中，在项目列查看区域ID ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268886489.png "点击放大")  |
| 环境ID | 登录CAE控制台，进入组件列表页面，当鼠标悬停在"环境"时，显示环境名称和环境ID。 ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268926577.png "点击放大")                                                         |
| 应用ID | 登录CAE控制台，进入组件列表页面，当鼠标悬停在"应用"时，显示应用名称和应用ID。 ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268886493.png "点击放大")                                                         |
| 组件ID | 登录CAE控制台，进入组件列表页面，当鼠标悬停在"组件"时，显示组件名称、组件版本和组件ID。 ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000002268926581.png "点击放大")                                                       |
   
