Menu Close

5.3. 使用 3scale Jenkins 共享库创建管道

本节提供创建使用 3scale toolbox 的自定义 Jenkins 管道的最佳实践。它解释了如何在 Groovy 中编写 Jenkins 管道,该管道使用 3scale Jenkins 共享库根据示例应用程序调用 toolbox。如需了解更多详细信息,请参阅 Jenkins 共享库

重要

红帽支持红帽集成存储库中提供的 Jenkins 管道示例

对这些管道所做的任何修改都不受红帽直接支持。不支持您为环境创建的自定义管道。

先决条件

步骤

  1. 将以下内容添加到 Jenkins 管道的开头,以引用管道的 3scale 共享库:

    #!groovy
    
    library identifier: '3scale-toolbox-jenkins@master',
       retriever: modernSCM([$class: 'GitSCMSource',
         remote: 'https://github.com/rh-integration/3scale-toolbox-jenkins.git'])
  2. 声明一个全局变量来存放 三个scaleService 对象,以便您可以在管道的不同阶段使用它。

    def service = null
  3. 使用所有相关信息创建 ThreescaleService

    stage("Prepare") {
      service = toolbox.prepareThreescaleService(
         openapi: [ filename: "swagger.json" ],
         environment: [ baseSystemName: "my_service" ],
         toolbox: [ openshiftProject: "toolbox",
                       destination: "3scale-tenant",
                       secretName: "3scale-toolbox" ],
         service: [:],
         applications: [
            [ name: "my-test-app", description: "This is used for tests", plan: "test", account: "<CHANGE_ME>" ]
            ],
         applicationPlans: [
           [ systemName: "test", name: "Test", defaultPlan: true, published: true ],
           [ systemName: "silver", name: "Silver" ],
           [ artefactFile: "https://raw.githubusercontent.com/my_username/API-Lifecycle-Mockup/master/testcase-01/plan.yaml"],
         ]
        )
    
      echo "toolbox version = " + service.toolbox.getToolboxVersion()
     }
    • OpenAPI.filename 是包含 OpenAPI 规范的文件的路径。
    • environment.baseSystemName 用于根据 OpenAPI 规格 info.version 中的 environment.environmentName 和 API 主要版本计算最终 system_name
    • toolbox.openshiftProject 是创建 Kubernetes 作业的 OpenShift 项目。
    • toolbox.secretName 是包含 3scale toolbox 配置文件的 Kubernetes secret 的名称,如 安装 3scale toolbox 并启用访问权限 所示。
    • toolbox.destination 是 3scale toolbox 远程实例的名称。
    • applicationPlans 是使用 a .yaml 文件或提供应用程序计划属性详情创建的应用程序计划列表。
  4. 添加一个管道阶段来在 3scale 中置备服务:

    stage("Import OpenAPI") {
      service.importOpenAPI()
      echo "Service with system_name ${service.environment.targetSystemName} created !"
    }
  5. 添加一个阶段来创建应用程序计划:

    stage("Create an Application Plan") {
      service.applyApplicationPlans()
    }
  6. 添加全局变量和阶段来创建测试应用程序:

    stage("Create an Application") {
      service.applyApplication()
    }
  7. 添加阶段来运行集成测试。使用 APIcast Hosted 实例时,您必须获取代理定义来提取暂存公共 URL:

    stage("Run integration tests") {
      def proxy = service.readProxy("sandbox")
      sh """set -e +x
      curl -f -w "ListBeers: %{http_code}\n" -o /dev/null -s ${proxy.sandbox_endpoint}/api/beer -H 'api-key: ${service.applications[0].userkey}'
      curl -f -w "GetBeer: %{http_code}\n" -o /dev/null -s ${proxy.sandbox_endpoint}/api/beer/Weissbier -H 'api-key: ${service.applications[0].userkey}'
      curl -f -w "FindBeersByStatus: %{http_code}\n" -o /dev/null -s ${proxy.sandbox_endpoint}/api/beer/findByStatus/   available -H 'api-key: ${service.applications[0].userkey}'
      """
    }
  8. 添加一个阶段来将 API 提升到生产环境:

    stage("Promote to production") {
      service.promoteToProduction()
    }