このページは GolangアプリをGitLabCI経由でAppEngineに公開する シリーズの一部です。
全体の目次は こちら でどうぞ。
デプロイ
デプロイ作業は GitLabCI を利用するので、CIの設定と GitLab 上のプロジェクトを作成する。
.gitlab-ci.yaml
GitLab のCI機能を使ってデプロイするのでその設定。
Golang 用のSDKを入れているので goapp
を使いたくなるところだが、goaap
はまだ?OAuth2のRefreshTokenの指定がサポートされていないので、同梱されているPython版で実行させる。
また、Dockerイメージは aslafy-z/gae-go-alpine から パクって フォークして AppEngine の最新版に差し替えた自作を利用している。
image: nobuhito/gae-go-alpine
stages:
- production
deploy_for_production:
stage: production
script: python /google_appengine/appcfg.py update . --oauth2_refresh_token=$REFRESH_TOKEN -A $PROJECT_ID
GitLabでプロジェクトを作成
GitLab でプロジェクトを作成して、設定の Variable
以下の変数を登録する。
- PROJECT_ID : AppEngineを作成したときに控えておいた
project_id
- REFRESH_TOKEN : ブラウザで認証した時に控えておいた
refresh_token
単純なデプロイ
単純にデプロイするだけであれば、作成した .gitlab-ci.yml
, app.yaml
, main.go
を GitLab のリポジトリへプッシュするだけで AppEngine へデプロイされる。
Running with gitlab-ci-multi-runner 1.10.4 (b32125f)
Using Docker executor with image nobuhito/gae-go-alpine ...
Pulling docker image nobuhito/gae-go-alpine ...
Running on runner-72989761-project-2617622-concurrent-0 via runner-72989761-machine-1486026574-ad66a9dd-gce...
Cloning repository...
Cloning into '/builds/nobuhito/HelloAppEngine'...
Checking out 43654c97 as master...
Skipping Git submodules setup
$ python /google_appengine/appcfg.py update . --oauth2_refresh_token=$REFRESH_TOKEN -A $PROJECT_ID
09:11 AM Application: atomic-wall-157508 (was: None); version: 1
09:11 AM Host: appengine.google.com
****************************************************************
09:11 AM Starting update of app: atomic-wall-157508, version: 1
09:11 AM Getting current resource limits.
09:11 AM Scanning files on local disk.
09:11 AM Cloning 4 application files.
09:11 AM Uploading 2 files and blobs.
09:11 AM Uploaded 2 files and blobs.
09:11 AM Compilation starting.
09:11 AM Compilation: 1 files left.
09:11 AM Compilation completed.
09:11 AM Starting deployment.
09:11 AM Checking if deployment succeeded.
09:11 AM Deployment successful.
09:11 AM Checking if updated app version is serving.
09:11 AM Completed update of app: atomic-wall-157508, version: 1
もしうまくデプロイされない場合は、下記を確認するといいかも。
- GitLabのビルドが問題なく完了しているか
- AppEngineで別のサービスが立ち上がってないか
- AppEngineで別のバージョンにトラフィックが偏ってないか
ここまでのコミットは ここ を参照。