TravisCI を使用して GAE にデプロイ
最近GCP*1のGAE*2を使用しています。github上で特定のブランチが更新されたら自動でデプロイしてほしいなと思い、Travis CI で自動デプロイされるよう試みました。
※ 今回テストなどは走らせていません。ただただデプロイするだけです。
※
.travis.yml
でdeploy
キーを利用したデプロイプロバイダを使用した方法がありますが、今回は利用していません。※ サービスアカウントキーを扱うなど、セキュリティ面での懸念点があります。当記事は全て自己責任でご参考下さい。
手順 (目次)
方法
1. The Travis Client をインストール
travis
コマンドを使用できるように、The Travis Client をインストールします。
gem install travis
詳しくは公式ページを参考にインストールして下さい。
2. サービスアカウントキー作成
GCPのAPIとサービス/認証情報ページに行き、サービスアカウントキーを作成して下さい。作成する際はJSONを指定しましょう。
作成後にダウンロードされたjsonファイル名を今回は client-secret.json
とします。
3. サービスアカウントキー暗号化
travis
コマンドを利用し、ファイルを暗号化します。
travis login --pro travis encrypt-file client-secret.json --add
--add
オプションをつけることで .travis.yml
にファイルを復号化するコマンドを自動で追記してくれます
4. .travis.yml
編集
下記は最低限の.travis.yml
を示しています。
language: ruby env: - PATH=$PATH:$HOME/google-cloud-sdk/bin before_install: - openssl aes-256-cbc -K $encrypted_key -iv $encrypted_iv -in client-secret.json.enc -out client-secret.json -d install: # install gcloud - export CLOUDSDK_CORE_DISABLE_PROMPTS=1 - curl https://sdk.cloud.google.com | bash # setup - gcloud config set project <projectid> - gcloud auth activate-service-account --key-file client-secret.json script: - gcloud app deploy
まずbefore_install
で暗号化したjsonファイルを復号化します。これらは手順3で自動追記されたものです。
そしてinstall
内でgcloud
コマンドをインストールし、deploy出来るようにprojectidやアカウント情報などを読み込みます。
今回の方法で google cloud sdk をインストールした場合。google-cloud-sdk/bin/gcloud
にgcloudがあります。そのためenv
でパスを通します。
最後に script
でデプロイしています。
5. リモートリポジトリへプッシュ
.travis.yml
と client-secret.json.enc
を add/commit し、push しましょう。
client-secret.json
はgit add/commit/push
しないで下さい。
備考/補足
現状だと毎回gcloudをdownload/installしてるので、TravisCI上のcacheなどを利用すると良いと思います。
deploy時のオプションなどお好みでセットしましょう。
client-secret.json
はgit管理下で保持しておくならば.gitignoreに含めておきましょう。上記に示した
.travis.yml
は最低限のものです。branches
やafter_success
など各自で記述して下さい。
参考
後記
CIとかもっと活用していけたらいいな。
間違いとかアドバイスとかあればコメント下さい!