GeekFactory

int128.hatenablog.com

CircleCIでApp Engine Javaアプリをデプロイする

CircleCI 2.0でGoogle App Engine (Java8 Standard) をデプロイする方法を調べたのでメモ。

  • google/cloud-sdk イメージを使う。
  • App Engine SDKとGradleでJavaが必要になるので、 google/cloud-sdk:alpine イメージに openjdk8 を追加する。DebianJavaの依存関係が複雑なため、Alpineをおすすめする。
  • サービスアカウントでデプロイする。

あらかじめサービスアカウントの秘密鍵BASE64エンコードし、CircleCIの $GCP_SERVICE_ACCOUNT_KEY 環境変数に入れておきます。

base64 -w0 gcp-service-account-key.json

最小構成の circle.yml は下記のようになります。

version: 2
jobs:
  build:
    docker:
      - image: google/cloud-sdk:alpine
    working_directory: ~/gradle_project_name
    steps:
      - run:
          name: Install
          command: |
            apk --update add openjdk8
            gcloud components install app-engine-java

      - checkout

      - run:
          name: Build
          command: |
            ./gradlew build

      - deploy:
          name: Deploy
          command: |
            if [ "$CIRCLE_BRANCH" = "release" ]; then
              echo "$GCP_SERVICE_ACCOUNT_KEY" | base64 -d > "$HOME/gcp-service-account-key.json"
              gcloud auth activate-service-account --key-file "$HOME/gcp-service-account-key.json"
              ./gradlew appengineDeploy
            fi

参考資料です。

circleci.com

#渋谷java でSwaggerのテンプレートを魔改造した話をした

第二十回 #渋谷java で、複数チームの並行開発におけるSwagger(OpenAPI)の活用についてお話しさせていただきました。

speakerdeck.com

TL;DR

  • 複数チームが並行開発を行う場合はインクリメンタルなAPI設計は避けられない。
  • OpenAPI YAMLからAPI Server, Clientを生成し、API Clientを利用側に共有することで、APIを安全にリファクタリングできる。
  • 自動生成されたコードを一切修正できない仕組みを強制することで、チーム開発の混乱を防ぐ。

実際にSwagger Codegenのテンプレートをカスタマイズした内容もお話ししました。

久しぶりにマニアックな話を聞けて楽しかったです。運営のみなさま、ありがとうございました!

togetter.com

Spring Boot + Gradleで依存関係のバージョンが下がる場合の対応策

GradleでSpring Boot Pluginを利用している場合、依存関係のバージョンが勝手に下がることがあります。例えば、

という依存関係がある場合、アプリのプロジェクトには spock-core-1.1-groovy-2.4 が入る気がしますが、実際には spock-core-1.0-groovy-2.4 の古いバージョンが入ります。

これは、spring-boot-dependenciesのpom.xmlで定義されているバージョンが優先されてしまうためのようです。

https://github.com/spring-projects/spring-boot/blob/1.5.x/spring-boot-dependencies/pom.xml

<spock.version>1.0-groovy-2.4</spock.version>

アプリのプロジェクトで新しいバージョンの依存関係を定義すれば解決します。

  • テスティングフレームワークのプロジェクト → spock-core-1.1-groovy-2.4
  • アプリのプロジェクト → テスティングフレームワークのプロジェクト
  • アプリのプロジェクト → spock-core-1.1-groovy-2.4

もしくは、ビルドスクリプトに以下を追記して、spring-boot-dependenciesのバージョンを上書きします。

ext.'spock.version' = '1.1-groovy-2.4'

extに書いた内容はサブプロジェクトにも適用されるので、後者が安心ですね。