# 测试与 CI/CD 流水线结合

    前文已为您介绍如何使用 Sonar 漏洞扫描单元测试自动化测试,本文将指导如何将这些节点结合至现有的 CI/CD 流水线文件中。

    # 新建 CI/CD 流水线

    进入 DevOps 平台 > 我的项目 > 应用开发, 新建一个业务应用,使用系统内置仓库,通过 git clone https://github.com/bzdgn/docker-spring-boot-java-web-service-example.git 下载 Demo 代码至本地,随后再推送至内置仓库。

    进入该应用的流水线页面,选择分支后新建默认流水线。关于如何图形化编辑流水线,请参见 流水线配置(图形)

    编辑后的 YML 结构如下所示。关于如何文本编辑流水线,请参见 流水线配置(文本)

    version: "1.1"
    stages:
      - stage:
          - git-checkout:
              alias: git-checkout
      - stage:
          - buildpack:
              alias: backend
              params:
                context: ${git-checkout}
                modules:
                  - name: java-demo
                    path: .
      - stage:
          - release:
              alias: release
              version: "1.0"
              params:
                dice_yml: ${git-checkout}/dice.yml
                replacement_images:
                  - ${backend}/pack-result
      - stage:
          - dice:
              alias: dice
              params:
                release_id: ${release:OUTPUT:releaseID}
    

    完成流水线编辑后,点击 新建流水线,随后点击执行按钮。关于如何执行流水线,请参见 流水线运行

    # 增加 Sonar 扫描节点

    如图所示,点击图形界面的 + 图标添加 Sonar 节点,完成相应信息填写(其中 code_dirlanguage 为必填项)。填写 code_dir${git-checkout}git-checkout 即 git-checkout action 中 alias 声明的字段。

    此处以 Java 应用为例,因此 language 处填为 java,其他字段请按需配置。 use_platform_quality_gate 默认为 true,代表使用 Erda 平台的扫描规则。更多规则配置相关内容,请参见 Sonar 门禁规则

    增加 Sonar 扫描节点后的 YML 结构如下所示:

    version: "1.1"
    stages:
      - stage:
          - git-checkout:
              alias: git-checkout
      - stage:
          - sonar:
              alias: sonar
              version: "1.0"
              params:
                code_dir: ${git-checkout}
                delete_project: true
                language: java
      - stage:
          - buildpack:
              alias: backend
              params:
                context: ${git-checkout}
                modules:
                  - name: java-demo
                    path: .
      - stage:
          - release:
              alias: release
              version: "1.0"
              params:
                dice_yml: ${git-checkout}/dice.yml
                replacement_images:
                  - ${backend}/pack-result
      - stage:
          - dice:
              alias: dice
              params:
                release_id: ${release:OUTPUT:releaseID}
    

    完成流水线执行后,进入 DevOps 平台 > 我的应用 > 代码质量 可查看质量报告和问题列表,具体请参见 Sonar 报告

    # 增加单元测试节点

    如图所示,点击图形界面的 + 图标添加单元测试节点,填写 context${git-checkout}git-checkout 即 git-checkout action 中 alias 声明的字段。若非 Golang 语言,可忽略其他选填字段。

    增加单元测试节点后的 YML 结构如下所示:

    version: "1.1"
    stages:
      - stage:
          - git-checkout:
              alias: git-checkout
      - stage:
          - sonar:
              alias: sonar
              version: "1.0"
              params:
                code_dir: ${git-checkout}
                delete_project: true
                language: java
      - stage:
          - unit-test:
              alias: unit-test
              version: "1.0"
              params:
                context: ${git-checkout}
      - stage:
          - buildpack:
              alias: backend
              params:
                context: ${git-checkout}
                modules:
                  - name: java-demo
                    path: .
      - stage:
          - release:
              alias: release
              version: "1.0"
              params:
                dice_yml: ${git-checkout}/dice.yml
                replacement_images:
                  - ${backend}/pack-result
      - stage:
          - dice:
              alias: dice
              params:
                release_id: ${release:OUTPUT:releaseID}
    

    完成单元测试执行后,可进入 DevOps 平台 > 我的应用 > 代码质量 > 执行列表 查看单元测试结果,具体请参见 单元测试

    # 增加自动化测试节点

    如图所示,点击图形界面的 + 图标添加自动化场景执行或自动化计划执行节点,完成相应信息填写。测试空间、场景集、场景和参数配置的可选数据均来自于自动化测试。

    待服务启动后,该 Action 将根据已配置的参数自动执行对应的计划或场景。若接口用例未 100% 通过,则该节点执行失败,您也可以进入对应场景的执行历史查看执行结果。