swagger.yaml から Swagger サーバーを自動生成して GAE にデプロイする仕組みを作ってみた


概要

swagger.yaml を GitHub に push すると CircleCI 経由で Swagger サーバーを Google App Engine (GAE) にデプロイされる仕組みを作ってみました。

swagger-codegen を使うと swagger.yaml から API ドキュメントとモックサーバーを生成することができます。GitHub で swagger-codegen で生成したサーバーサイドのコードを管理して Webhooks を使ったデプロイをする方法もありますが、生成に必要な swagger.yaml だけをソース管理した方が管理しやすいので、その仕組みを作ってみました。

完成物

今回は Swagger Editor で最初に入力されている Petstore のものをそのまま使いました。


API ドキュメント


モック API

使用技術

GitHub

swagger.yaml を管理して CircleCI と連携します。

CircleCI

GitHub に push されたときに Webhooks を受け取って、swagger-codegen によるビルド 〜 GAE へのデプロイまで行います。

swagger-codegen

swagger.yaml から Swagger サーバーのコードを生成するために用います。今回は Docker Hub に上がっているものを使いました。

GitHub: https://github.com/swagger-api/swagger-codegen
Docker Hub: https://hub.docker.com/r/swaggerapi/swagger-codegen-cli

Google App Engine

Swagger サーバーのデプロイ先として Google App Engine を利用しました。

コードと使い方

コードは全て tanabee/swagger-deployment-template にあげています。使い方は README.md に書きました。

Orbs を使ったら GCP の service_account.json などのプロジェクト固有の設定ファイルを repo に置かなくて設定できてよかったです。yaml もかなり少ない行数で書けます。

.circleci/config.yml
version: 2.1

orbs:
  gcp-cli: circleci/[email protected]

jobs:
  build:
    machine: true
    steps:
      - checkout
      - run: mkdir swagger
      - run: docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate -i /local/swagger.yaml -l nodejs-server -o /local/swagger
      - gcp-cli/initialize
      - run: cp ./app.yaml swagger/app.yaml
      - run: gcloud app deploy swagger/app.yaml --no-promote --version=1

CircleCI は不慣れなので、もっと良い書き方あればプルリクください

まとめ

GitHub, CircleCI を組み合わせて GAE にデプロイする仕組みができました。 Fork して簡単に使えるようにしていますので、気になる方は触ってみてください。プルリクもお待ちしてます!

関連記事