はじめに
以前投稿した「IntelliJ IDEAを使ってGAE/GoのHelloWorldする」のGAE/Goで作ったWebアプリを、CircleCIからGoogleAppEngineへdeployする手順の説明です。
前提条件・環境
- GoogleAppEngineでアカウントが登録済み
- CircleCIでアカウント登録済み
- GAE/GoのWebアプリのリポジトリがGithubにある
CircleCIの設定
プロジェクト直下にcircle.ymlを追加
今回は、appengineのバージョン1.9.12の例。
machine:
timezone:
Asia/Tokyo
dependencies:
pre:
- curl -o $HOME/go_appengine_1.9.12.zip https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.12.zip
- unzip -q -d $HOME $HOME/go_appengine_1.9.12.zip
override:
- $HOME/go_appengine/goapp build
test:
override:
- $HOME/go_appengine/goapp test
deployment:
appengine:
branch: master
commands:
- $HOME/go_appengine/appcfg.py --oauth2_refresh_token=$APPENGINE_TOKEN update .
refresh_tokenを用意する
一回だけ手動でデプロイする必要があります。
これ以外でrefresh_tokenを作成する方法がわからなかったので。。。
以下は、ホーム直下にgo_appengineをインストールした例です。
$ ~/go_appengine/appcfg.py --oauth2 --noauth_local_webserver update .
こんな感じでブラウザURLが出てきますので、oauth認証を行います。
発行されたコードをEnter verification code:
に入力してそのまま1回deployします。
01:41 PM Application: xxxxxxx; version: 1
01:41 PM Host: appengine.google.com
01:41 PM
Starting update of app: xxxxxxx, version: 1
01:41 PM Getting current resource limits.
Go to the following link in your browser:
https://accounts.google.com/o/oauth2/auth?scope=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Enter verification code:
deploy成功すれば、ホーム直下にappcfg_oauth2_tokens
というファイルができているので、この中にあるrefresh_token
をメモします。
$ cat ~/.appcfg_oauth2_tokens
こんなjsonのやつです。
{
"_module": "oauth2client.client",
"_class": "OAuth2Credentials",
"access_token": "xxxxxxxxxxx-xxxxxxx- xxxxxxxx",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"invalid": false,
"client_id": "1111111111111.apps.googleusercontent.com",
"id_token": null,
"client_secret": "xxxxxxxxxxxxxxx",
"token_expiry": "2014-07-26T12:42:51Z",
"refresh_token": "1/xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"user_agent": "appcfg_go/1.9.6 Darwin/13.3.0 Python/2.7.8.final.0"
}
CircleCIにプロジェクトを追加しAPPENGINE_TOKENを設定
CircleCIログイン後の左メニューにあるAdd Projects
からGAE/GoプロジェクトのGithubを選択します。
最初のbuildが走ってしまいますが、そこは気にしないでproject settings
を開きます。
Environment variables
を選択して、先ほどのcircle.yml
に記載した環境変数APPENGINE_TOKEN
を追加します。
設定する値は、先ほど手動deploy時に発行されたrefresh_token
を設定します。
CircleCIのGOPATHを変更する
GAE/Goはプロジェクト直下をGOPATHとして動くため、それにあわせる(そうしないとsubpackage等がbuildエラーになる)
Environment variables
を選択して、GOPATH
に$HOME/$CIRCLE_PROJECT_REPONAME
を設定する。
おわり
これでRebuildもしくは、変更をgithubにpushした時にbuildが走ってtestが通ればGoogleAppEngineにdeployされます。
ちなみに最初は、CircleCIのドキュメントに書かれているemailとpassを環境変数に持たせるやつを試していたんですが、最近のバージョンから廃止されたみたいで、かなりハマってました。。。OTL
使用したソースコードなど
試したソースコード等は、Githubで公開しているので参考にしていただければと思います。