werckerを使ってBitbucketからさくらのVPSに自動デプロイ

werckerを使って、Bitbucketのリポジトリにpushすると自動でさくらのVPSにデプロイされるようにしようとしたところ、最近?微妙にwerckerのUIが変更されていたようで少しつまずきました。

Bitbucketの設定

VPSのユーザー(ここではwerckerという名前のユーザーにします)の~/.ssh/id_rsa.pubをコピーしてBitbucketのデプロイキーに登録します。
(デプロイしたいリポジトリの [設定] > [デプロイ鍵] )

werckerの設定

Applicationの作成・設定

ヘッダーの[Create] > [Application] をクリックしてApplicationを作ります。

01

 

次にBitbucketのリポジトリの一覧からデプロイしたいリポジトリを選択して「Use selected repo」をクリック。

02

 

「 Add the deploy key to the selected repository for me 」を選択して、「Next steps」クリック。すると、このapplicationのデプロイキーがリポジトリに登録されます。

03

 

最後に「Finish」をクリックします。

 

deploy用のpipelineを追加

ここで少しはまったのですが、buildが終わった後のdeploy用のpipelineを追加していきます。
Workflowタブに移動し「Add new pipeline」をクリックして、deployという名前で[Create]します。

04

 

次に、名前はなんでもいいのですが、今回はWERCKERという名前でGenerate new SSH key-pairします。

05

これをコピーしてVPSのwerckerユーザーの ~/.ssh/authorized_keys に追加します。

最後に、もう1度Workflowsタブに戻って先ほど作成したdeployというpipelineを追加しましょう。masterブランチをデプロイしたいので、デプロイ対象のブランチをmasterブランチにしました。

06

wercker.ymlファイルの作成

リポジトリの直下にwercker.ymlファイルを追加します。
以下、wercker.ymlのサンプルです。
※今回ビルド時には特に何も実行していません。

# This references a standard debian container from the
# Docker Hub https://registry.hub.docker.com/_/debian/
# Read more about containers on our dev center
# http://devcenter.wercker.com/docs/containers/index.html
box: debian
# You can also use services such as databases. Read more on our dev center:
# http://devcenter.wercker.com/docs/services/index.html
# services:
# - postgres
# http://devcenter.wercker.com/docs/services/postgresql.html

# - mongo
# http://devcenter.wercker.com/docs/services/mongodb.html

# This is the build pipeline. Pipelines are the core of wercker
# Read more about pipelines on our dev center
# http://devcenter.wercker.com/docs/pipelines/index.html
build:
# Steps make up the actions in your pipeline
# Read more about steps on our dev center:
# http://devcenter.wercker.com/docs/steps/index.html
    steps:
        - script:
            name: echo
            code: |
                echo "hello world!"

deploy:
    steps:
        - install-packages: #sshできるようにopenssh-clientをインストール
           packages: openssh-client

        - add-ssh-key:
            keyname: WERCKER
            host: xxxxxx.sakura.ne.jp #VPSのホスト名に変更

        - add-to-known_hosts:
            host: xxxxxx.sakura.ne.jp #VPSのホスト名に変更

        - create-file:
            name: write key
            filename: $HOME/.ssh/id_rsa
            overwrite: true
            content: $WERCKER_PRIVATE

        - script:
           name: change permission
           code: |
               chmod 600 $HOME/.ssh/id_rsa

       - script:
           name: transfer application
           code: |
               scp -r -i $HOME/.ssh/id_rsa -P ポート番号 -o StrictHostKeyChecking=no -o  UserKnownHostsFile=no $WERCKER_ROOT/* wercker@ホスト名:/var/www/html/hogehoge

deployはビルドしたコードをscpでVPSに転送しているだけですね。
これでリモートリポジトリのmasterブランチにpushすると、VPSにデプロイされるようになりました。
デプロイしているだけでテストを実行するなどCI的な使い方はできていませんが、デプロイを自動化するだけでもだいぶ調子いいですね〜

参考記事

http://blog.wercker.com/2013/08/22/Simplifying-ssh-based-deployment.html