温馨提示×

Ubuntu Swagger如何实现持续集成

小樊
35
2025-11-14 14:07:14
栏目: 智能运维

Ubuntu 下 Swagger OpenAPI 持续集成方案

一 总体流程与工具选型

  • 将 **OpenAPI/Swagger 规范文件(YAML/JSON)**纳入 Git 管理,作为唯一事实源。
  • Ubuntu 构建机安装基础环境:DockerJava 11+Node.js(如需前端或 OpenAPI Generator)。
  • 选择文档形态:
    • 静态托管:用 Swagger UI 容器或 openapi-generator 生成 HTML 文档站点。
    • 运行时托管:在 Spring Boot 中集成 springdoc-openapi-ui,随服务启动提供 /swagger-ui.html
  • Jenkins/GitLab CI/GitHub Actions 中编排:拉取代码 → 校验规范 → 生成/构建 → 部署 → 可选通知。

二 快速落地示例

  • 示例一 静态站点 + GitLab CI

    • 规范与构建:将 openapi.yaml 置于仓库根目录;使用 openapi-generator 生成静态 HTML 文档并归档。
    • 示例 .gitlab-ci.yml
      stages: - build - deploy variables: OPENAPI_GENERATOR_VERSION: "7.10.0" build-docs: stage: build image: node:18 script: - npm i -g @openapitools/openapi-generator-cli@$OPENAPI_GENERATOR_VERSION - openapi-generator-cli generate -i openapi.yaml -g html -o public/docs artifacts: paths: - public/docs deploy-pages: stage: deploy image: alpine needs: [build-docs] script: - mkdir -p /public - cp -r public/docs /public pages: path_prefix: /docs 
    • 说明:生成的站点可通过 GitLab Pages 访问;也可改为 Nginx 托管或上传至对象存储。
  • 示例二 Spring Boot 运行时文档 + Jenkins

    • 依赖(Maven,使用 springdoc-openapi-ui):
      <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.8.0</version> </dependency> 
    • 构建与部署(Jenkinsfile 片段):
      pipeline { agent any stages { stage('Build') { steps { sh 'mvn -B package -DskipTests' } } stage('Test') { steps { sh 'mvn test' } } stage('Deploy') { steps { sh ''' docker build -t myapi:$BUILD_NUMBER . docker stop myapi || true docker rm myapi || true docker run -d --name myapi -p 8080:8080 myapi:$BUILD_NUMBER ''' } } } } 
    • 访问:服务启动后打开 http://:8080/swagger-ui.html

三 规范校验与自动化测试

  • 规范校验
    • 使用 openapi-generator-cli validate 在 CI 中对 openapi.yaml 做结构与语义校验,失败即阻断合并。
      openapi-generator-cli validate -i openapi.yaml 
  • 契约/契约测试
    • 使用 Schemathesis 基于 OpenAPI 规范对运行中的服务进行自动化测试(适合在 CI 的部署后阶段执行)。
      pip install schemathesis schemathesis run openapi.yaml --base-url http://localhost:8080 
    • 结合单元测试(如 JUnit/MockMvcpytest)保证接口与文档一致。

四 部署与发布策略

  • 静态文档站点
    • 使用 Docker 快速运行 Swagger UI 容器,挂载规范文件或构建产物,便于环境隔离与快速回滚。
      docker run -d -p 38081:8080 \ -e SWAGGER_JSON=/spec/openapi.yaml \ -v $PWD/openapi.yaml:/spec/openapi.yaml \ swaggerapi/swagger-ui:latest 
    • 适合作为 预览环境GitLab Pages/Nginx 的发布目标。
  • 运行时文档
    • springdoc-openapi-ui 随应用一起部署,通过 /swagger-ui.html 访问;在 CI 中配合镜像构建与滚动更新实现零停机发布。
  • 版本与变更
    • openapi.yaml 与代码同库管理,利用 CI 阶段门禁(校验/测试)保证每次变更都经过验证;必要时为文档生成 版本化路径/目录

0