werckerを使って無料でgaeにデプロイする

この記事に書いたこと

以上を使って、開発→ビルド→リリースを無料で完結させます。

フロー図

図の用語解説

Bitbucket (https://bitbucket.org)

ソースリポジトリホスティングサービスです。

Wercker (http://wercker.com/)

githubやBitbucketに対応した現在ベータで無料のCIサービスです。pushをフックして指定した環境でビルド/デプロイをします。リポジトリの直下に処理の設定を記述したwercker.ymlを置きます。Bitbucketのプライベートリポジトリに無料で対応しているサービスはこれしか確認できませんでした。2015年4月ぐらいにDockerコンテナ内部でのビルド/デプロイがサポートされました。

Google App Engine(for Python)(https://cloud.google.com/appengine/docs/python/)

Paas。アプリケーションの実行環境で対応言語はPython, Java, Go, PHPです。無課金だとリクエスト数やデータ書き込み数、インスタンス起動時間等の制限がありオーバーすると24時間単位でリセットされるまでその機能が使えません。

google/cloud-sdkコンテナ内部からのデプロイ

Werckerでは指定したDockerコンテナの内部に連携させたリポジトリをcloneしてビルドとデプロイを行います。このデプロイ方法がWercker用の設定ファイルに書く内容となります。また、OAuth2での認証方法ではデプロイ時にブラウザから指定アドレスにアクセスしての認証が必要となるので今回はp12形式証明書を使用したデプロイを行いました。

キーの生成方法

Google Developers Console( https://console.developers.google.com/project )で生成します。 デプロイするプロジェクトを選び認証情報を選択します。 続いて、新しいクライアントIDを作成します。 クライアントIDの作成でサービスアカウントを選択します。 証明書のダウンロードが始まります。このファイルと画面に表示されているメールアドレスを使用して認証をします。

以上で、準備が整いました。

wercker用の設定ファイルの書き方

対象のプロジェクトの直下にWercker設定用のwercker.ymlとダウンロードした証明書を追加します。ソース中の"$WERCKER_SOURCE_DIR"にはBitbucketからcloneしたソースが入っています。

box: google/cloud-sdk
build:
    steps:
        - script:
            name: test & deploy script
            code: |-
                echo 'test & build!'
deploy:
    steps:
        - script:
            name: deploy to gae
            code: |-
                gcloud auth activate-service-account メールアドレス --key-file "$WERCKER_SOURCE_DIR"/拡張子p12の証明書 --project プロジェクト名
                appcfg.py update "$WERCKER_SOURCE_DIR"/

デプロイ準備

上記で指定したdeployの実行設定をします。まず、Settingsを選択します。
werckerに未定義のデプロイ方法なのでcustom deployを選びます。
Deploy target name: 好きな名前
Auto deploy: チェックを付けると対象ブランチのビルド完了時に自動でデプロイされます。

これでビルド完了後にビルドされます。

ビルド済みのアプリケーションのデプロイ実行

ビルド済みのアプリケーションに関しては手動でデプロイもできます。
ビルド結果からidを選択して詳細画面へ。
Deploy to を選択すると…
先ほど作成した「gae」が出ています。
デプロイメッセージを入力して、Start Deployします。
緑に慣れば、完了です。

参考

Google Cloud StorageのAPIを利用するための手順 | Oreradio.memo

Cloud SDKにおけるp12証明書を使用した認証方法が記載してある貴重なページです。このページが糸口となり認証ができるようになりました。

gcloud auth activate-service-account - Cloud SDK — Google Cloud Platform

googleが提供しているCloud SDKの認証リファレンスです。

google/cloud-sdk Repository | Docker Hub Registry - Repositories of Docker Images

googleが提供しているCloud SDKのコンテナです。google cloud sdkがたくさん入っています。2015/06/16時点では以下のsdkがサポートされています。 - App Engine SDK for Go - App Engine SDK for Java - App Engine SDK for Python and PHP - Big Query Command Line Tool - Cloud DNS Admin Command Line Interface - Cloud SQL Admin Command Line Interface - Cloud Storage Command Line Tool - Compute Engine Command Line Tool - Preview Command Line Tools

Werckerの仕組み,独自のboxとstepのつくりかた | SOTA

werckerの仕組みに関してわかりやすく書いてあります。この記事を何度も読んでwerckerを始めることが出来ました。文中ではdockerを使用したビルド/デプロイの話は補足程度しか出てきていませんが文中のboxが2015/04にdockerでも可能になったと思いながら読めます。