LoginSignup
33
39

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-17

概要

スクリーンショット 2019-06-16 15.50.24.png

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

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

完成物

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

スクリーンショット 2019-06-15 22.54.59.png
API ドキュメント

スクリーンショット 2019-06-15 22.54.43.png
モック 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/gcp-cli@1.5.0

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 は不慣れなので、もっと良い書き方あればプルリクください :bow:

まとめ

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

関連記事

33
39
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
39