学生かえるエンジニアのブログ

iOSを主にやる勉強中エンジニア。かえるが好き。ピクルスってかわいいよね。

TravisCI を使用して GAE にデプロイ

最近GCP*1のGAE*2を使用しています。github上で特定のブランチが更新されたら自動でデプロイしてほしいなと思い、Travis CI で自動デプロイされるよう試みました。

※ 今回テストなどは走らせていません。ただただデプロイするだけです。

.travis.ymldeploy キーを利用したデプロイプロバイダを使用した方法がありますが、今回は利用していません。

※ サービスアカウントキーを扱うなど、セキュリティ面での懸念点があります。当記事は全て自己責任でご参考下さい。

手順 (目次)

  1. The Travis Client をインストール
  2. サービスアカウントキー作成
  3. サービスアカウントキー暗号化
  4. .travis.yml 編集
  5. リモートリポジトリへプッシュ

方法

1. The Travis Client をインストール

travis コマンドを使用できるように、The Travis Client をインストールします。

gem install travis

詳しくは公式ページを参考にインストールして下さい。

2. サービスアカウントキー作成

GCPAPIとサービス/認証情報ページに行き、サービスアカウントキーを作成して下さい。作成する際はJSONを指定しましょう。

作成後にダウンロードされたjsonファイル名を今回は client-secret.json とします。

f:id:yuki0n0:20171012040213p:plain:w300
f:id:yuki0n0:20171012040220p:plain:w300

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.ymlclient-secret.json.enc を add/commit し、push しましょう。

client-secret.jsongit add/commit/pushしないで下さい。

備考/補足

  • 現状だと毎回gcloudをdownload/installしてるので、TravisCI上のcacheなどを利用すると良いと思います。

  • deploy時のオプションなどお好みでセットしましょう。

  • client-secret.json はgit管理下で保持しておくならば.gitignoreに含めておきましょう。

  • 上記に示した .travis.yml は最低限のものです。 branchesafter_success など各自で記述して下さい。

参考

後記

CIとかもっと活用していけたらいいな。

間違いとかアドバイスとかあればコメント下さい!

*1:Google Cloud Platform

*2:Google App Engine