GoogleCloudPlatformに対してCIを使いたいパターンも存在すると思います。
まとまったドキュメントがない気もするので書いてみました。
ちなみにCircleCIは本稿作成時点では2.0もあり、こちらはDocker必須なので敷居が高いので1.0で説明します。
RubyonRailsだけど他のものでも応用可能かと。
【前提条件】
・CircleCI1.0
・GCP上にサーバ環境構築済み
・デプロイシェルを /var/www/xxx/bin/deploy
とする
【基本的なフロー】
1. CircleCIにGithubでログイン
2. リポジトリを選択して設定を行う
3. GCPのAPI Managerで認証情報を作成
4. CircleCIに認証情報を環境変数にして登録
5. ssh-keygenで認証キー作成
6. CircleCIに認証キー保存デプロイする
7. ブランチにcircle.ymlを作成
8. デプロイ開始
こんなところです。以下詳細に説明します。
CircleCIにGithubでログイン
リポジトリを選択して設定を行う
GCPのAPI Managerで認証情報を作成
サービスアカウントキーの作成から、新しいサービスアカウントキーを作成。上記のような情報を
入力してjsonファイル(一度しか生成されない)を取得する。
その後、取得したjsonファイルをbase64エンコードする。
base64 service_xxx@yyy.json
エンコードした結果をCircleCI上に環境変数(GCLOUD_SERVICE_KEY)として次のようにして保存する。
CircleCIに認証情報を環境変数にして登録
上記で作成した認証情報を環境変数に入れ込み、あとでCircleCIの実行時に動的に取り出して接続する。
ssh-keygenで認証キー作成
CircleCIの仮想マシンからGCPのサーバにアクセスする際にキーが必要。この辺参照して作成する。
http://qiita.com/suthio/items/2760e4cff0e185fe2db9
CircleCIに認証キー保存デプロイする
作成された認証キーはCIの仮想マシンに設定する必要あり、こちらの画面から登録。
ブランチにcircle.ymlを作成
デプロイするブランチの直下に以下の circle.yml
を置くことでCiricleCIの設定を行う
general:
branches:
only:
- master
- develop
machine:
timezone:
Asia/Tokyo
environment:
ACCOUNT: circleci@yyyy-stg.iam.gserviceaccount.com
GAE_GO_SDK_VERSION: 1.9.24
PATH: $PATH:$HOME/go_appengine
dependencies:
pre:
- curl -o $HOME/go_appengine_${GAE_GO_SDK_VERSION}.zip https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-${GAE_GO_SDK_VERSION}.zip
- unzip -q -d $HOME $HOME/go_appengine_${GAE_GO_SDK_VERSION}.zip
deployment:
staging:
branch: develop
commands:
- echo $GCLOUD_SERVICE_KEY | base64 --decode --ignore-garbage > ${HOME}/gcloud-service-key.json
- sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
- gcloud auth activate-service-account $ACCOUNT --key-file ${HOME}/gcloud-service-key.json
- ssh developaccount@xx.yy.ww.zz -C /var/www/xxx/bin/deploy #deploy shell
production:
branch: master
commands:
- echo $GCLOUD_SERVICE_KEY | base64 --decode --ignore-garbage > ${HOME}/gcloud-service-key.json
- sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
- gcloud auth activate-service-account $ACCOUNT --key-file ${HOME}/gcloud-service-key.json
- ssh developaccount@xx.yy.ww.zz -C /var/www/xxx/bin/deploy #deploy shell
デプロイシェルの例(GCP上にCakePHPでプロジェクト作成した場合)
#!/bin/sh
cd /var/www/html
git pull origin master
yes | ./app/Console/cake schema update
各ブランチにソースをコミット→プッシュ
GithubのMaster、Developにコミット→プッシュすることで自動的にCiricleCIがデプロイを始めます。