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
を追加する。DebianはJavaの依存関係が複雑なため、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
参考資料です。
#渋谷java でSwaggerのテンプレートを魔改造した話をした
第二十回 #渋谷java で、複数チームの並行開発におけるSwagger(OpenAPI)の活用についてお話しさせていただきました。
TL;DR
- 複数チームが並行開発を行う場合はインクリメンタルなAPI設計は避けられない。
- OpenAPI YAMLからAPI Server, Clientを生成し、API Clientを利用側に共有することで、APIを安全にリファクタリングできる。
- 自動生成されたコードを一切修正できない仕組みを強制することで、チーム開発の混乱を防ぐ。
実際にSwagger Codegenのテンプレートをカスタマイズした内容もお話ししました。
久しぶりにマニアックな話を聞けて楽しかったです。運営のみなさま、ありがとうございました!
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に書いた内容はサブプロジェクトにも適用されるので、後者が安心ですね。