LoginSignup
12
8

More than 5 years have passed since last update.

GoのアプリをCircleCIからAppEngineへデプロイする

Last updated at Posted at 2016-09-13

GAE/GoのアプリをCircleCIからデプロイできるようにしたいと思います。AWSにデプロイするのとは違う感じなので、ドキュメントを読みました。以下はAppEngine Flexible Environment へのデプロイになります。StandardEnvでも参考にはなると思いますが、違う部分もあるので注意してください。
また、flexible envはまだbetaなので、この辺りすぐに変わる可能性があります。

公式のドキュメント

このあたりを読めば書いてあります。

以下では書いてあることを順にやっていきます。

GCPサービスアカウントの作成

まずは GCPのコンソールで 「IAMと管理」のメニューから「サービスアカウント」を作成します。サービスアカウント名を入力して、"新しい秘密鍵の提供"にチェックを入れ、キーのタイプはJSONを選びます。

次にダウンロードしたJSONファイルをbase64エンコードして、その結果をコピーします。

base64 <your-service-account.json>

CircleCIのプロジェクトの設定からEnvironmental Variableに新たに環境変数を追加します。keyをGCLOUD_SERVICE_KEY にして、Valueにさっきコピーした文字列を貼り付けます。

また、同じくCircleCIの環境変数で KeyをGCLOUD_PROJECT にして Valueにプロジェクト名を入れておきます。

また、上記ページに書いてないけど必要なこととして、

  • GCP Consoleの「APIManager」から、AppEngine Admin APIを有効にする
  • GCPConsoleの「IAMと管理」で、上で作成したサービスアカウントを追加して、「プロジェクトの編集者」の権限を付与する

をやる必要がありました。

circle.ymlを設定する

circle.ymlは以下のように書けます。

dependenciesの上の4行は、先ほど作成したGCPサービスアカウントを利用してGCPへデプロイするための設定を行っています。
dependenciesの次の2行は、デプロイする際に必要となるpermissionを設定します。
dependenciesの下の2行は、プロジェクトに依存するファイルと、デプロイに必要なaedeploygo getしています。

deployment では、自分の場合 app.yamlが appディレクトリに置いているので aedeployを実行する前にcdしています。

circle.yml
machine:
  timezone:
    Asia/Tokyo
dependencies:
  pre:
    - echo $GCLOUD_SERVICE_KEY | base64 --decode > ${HOME}/gcloud-service-key.json
    - sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
    - sudo /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
    - sudo /opt/google-cloud-sdk/bin/gcloud config set project $GCLOUD_PROJECT
    - sudo chmod -R 757 /home/ubuntu/.config/gcloud/logs
    - sudo chmod -R 757 /home/ubuntu/.config/gcloud/credentials
    - go get -t -d -v ./...
    - go get google.golang.org/appengine/cmd/aedeploy

deployment:
    dev:
        branch: master
           - cd app && /home/ubuntu/.go_workspace/bin/aedeploy /opt/google-cloud-sdk/bin/gcloud -q app deploy ./app.yaml --promote 

ハマリどころ

  • gcloud app deployの実行で permission エラーが結構出ました。サービスアカウントに「AppEngineへのデプロイ」の権限だけ付与してもダメで、結局プロジェクトの編集者の権限を付与しています。

  • CircleCIのドキュメントの通りに gcloud app deployを実行しても、Goの場合GOPATH周りがおかしくなり必要なpackageがないとエラーが出てしまうので、 aedeployを使います。

StandardEnvの場合

Continuous Deployment to Google App Engine - CircleCIにあるように、AppEngineSDKを取ってくる必要があります。

    - curl -o $HOME/go_appengine_1.9.38.zip https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.38.zip
    - unzip -q -d $HOME $HOME/go_appengine_1.9.38.zip

これでgoappコマンドを使ったテストができます。

12
8
0

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
12
8