LoginSignup
4
2

More than 5 years have passed since last update.

CircleCI 1.0からGCPにデプロイ(リポジトリにデプロイシェルがあるパターン)

Last updated at Posted at 2017-07-28

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でログイン

スクリーンショット 2017-07-27 16.44.26.png

リポジトリを選択して設定を行う

対象となるソースのリポジトリを指定する。
スクリーンショット 2017 07 27 18.23.23.png

GCPのAPI Managerで認証情報を作成

GCPアクセスのための認証情報を作成する。
認証情報   vr platform stg.png

サービス アカウント キーの作成   VR Platform.png
サービスアカウントキーの作成から、新しいサービスアカウントキーを作成。上記のような情報を
入力してjsonファイル(一度しか生成されない)を取得する。

その後、取得したjsonファイルをbase64エンコードする。

base64 service_xxx@yyy.json

エンコードした結果をCircleCI上に環境変数(GCLOUD_SERVICE_KEY)として次のようにして保存する。

CircleCIに認証情報を環境変数にして登録

上記で作成した認証情報を環境変数に入れ込み、あとでCircleCIの実行時に動的に取り出して接続する。
Org settings   flic360   CircleCI (2).png
Project settings   flic360 Flic360_system   CircleCI (2).png

ssh-keygenで認証キー作成

CircleCIの仮想マシンからGCPのサーバにアクセスする際にキーが必要。この辺参照して作成する。
http://qiita.com/suthio/items/2760e4cff0e185fe2db9

CircleCIに認証キー保存デプロイする

作成された認証キーはCIの仮想マシンに設定する必要あり、こちらの画面から登録。
Project settings   flic360 Flic360_system   CircleCI (3).png

ブランチに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がデプロイを始めます。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2