7.3. 使用 3scale Jenkins 共享库创建管道
本节提供创建使用 3scale toolbox 的自定义 Jenkins 管道的最佳实践。它解释了如何在 Groovy 中编写 Jenkins 管道,该管道使用 3scale Jenkins 共享库根据示例应用程序调用 toolbox。如需了解更多详细信息,请参阅 Jenkins 共享库。
重要
红帽支持红帽集成存储库中提供的 Jenkins 管道示例。
对这些管道所做的任何修改都不受红帽直接支持。不支持您为环境创建的自定义管道。
前提条件
- 部署示例 Jenkins CI/CD 管道.
- 您的 API 必须具有 OpenAPI 规格文件。例如,您可以使用 Apicurio Studio 生成此操作。
流程
将以下内容添加到 Jenkins 管道的开头,以引用管道的 3scale 共享库:
#!groovy library identifier: '3scale-toolbox-jenkins@master', retriever: modernSCM([$class: 'GitSCMSource', remote: 'https://github.com/rh-integration/3scale-toolbox-jenkins.git'])
声明一个全局变量来存放
三个scaleService
对象,以便您可以在管道的不同阶段使用它。def service = null
使用所有相关信息创建
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
是使用一个.yaml
文件或提供应用程序计划属性详情创建的应用程序计划列表。
-
添加一个管道阶段来在 3scale 中置备服务:
stage("Import OpenAPI") { service.importOpenAPI() echo "Service with system_name ${service.environment.targetSystemName} created !" }
添加一个阶段来创建应用程序计划:
stage("Create an Application Plan") { service.applyApplicationPlans() }
添加全局变量和阶段来创建测试应用程序:
stage("Create an Application") { service.applyApplication() }
添加阶段来运行集成测试。使用 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}' """ }
添加一个阶段来将 API 提升到生产环境:
stage("Promote to production") { service.promoteToProduction() }