読者です 読者をやめる 読者になる 読者になる

技術ネタとかの備忘録

最近の技術ネタとかの備忘録を書いていくブログです

Golang+AppEngineをCircleCIで自動デプロイ

AppEngine Golang CircleCI 技術

CircleCIを使ってGolangアプリをAppEngineにデプロイしたときのメモ。

公式ドキュメント

公式のドキュメントはこちらです。
Authentication with Google Cloud Platform - CircleCI
Continuous Deployment to Google App Engine - CircleCI

ただ、外部ライブラリを使用しているアプリはエラーが出ます。
外部ライブラリが解決できずにコンパイルが通りません。

Updating service [default]...failed.
ERROR: (gcloud.app.deploy) Error Response: [9] Deployment contains files that cannot be compiled: Compile failed:
2017/01/31 06:00:04 go-app-builder: build timing: 1×compile (37ms total), 0×link (0s total)
2017/01/31 06:00:04 go-app-builder: failed running compile: exit status 1

article_controller.go:4: can't find import: "github.com/gorilla/mux"

circle.yml

最終的にデプロイが成功したcircle.ymlがこちらです。

machine:
  timezone:
    Asia/Tokyo

dependencies:
  pre:
    - curl -o $HOME/go_appengine_1.9.48.zip https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.48.zip
    - unzip -q -d $HOME $HOME/go_appengine_1.9.48.zip
    - gcloud auth activate-service-account --key-file $HOME/$CIRCLE_PROJECT_REPONAME/gcloud-service-key.json
    - gcloud config set project $GCLOUD_PROJECT
    - go get github.com/gorilla/context

deployment:
  appengine:
    branch: master
    commands:
      - $HOME/go_appengine/appcfg.py update . --oauth2_access_token $(gcloud auth print-access-token 2> /dev/null)

やったこと

  • gcloudコマンドではなくappcfg.pyを使用する
  • [CircleCI]→[Environment Variables]→[Add Variable]でGCLOUD_PROJECT(設定値はデプロイ先のプロジェクトID)を追加する
  • [Google Cloud Platform]→[IAMと管理]でJSONキー(gcloud-service-key.json)を生成し、プロジェクト直下に配置する
  • gorilla/muxを使用する際はgorilla/contextをgo getする*1

*1:コンパイルエラーが発生します(github.com/gorilla/mux/context_gorilla.go:8: can’t find import: “github.com/gorilla/context")