yamarkz's blog

紫陽花

CI wercker v2の使い方

この記事は2016年2月で動かす場合の使用方法を紹介しています。wercker自体が開発途中で仕様が変わったりするので注意してください。
また、この記事は常時更新して書き換えていきます。よりわかりやすくより読みやすくを目指していくので、読みにくさがあってもお許しください。

ログイン〜登録

f:id:katlez:20160204152730p:plain

Wercker - From code to containers

werckerのサイトトップです。
ユーザー登録してログインします。

上部にあるCreateを選択してApplicationを選択します。

f:id:katlez:20160204153648p:plain

GitHubかBitbucketを選択する画面が出ます。
どちらかを選択して、さらにテストを実行したいリポジトリも選択します。
次の選択もRecommendされているものを選択。

Step 5でデフォルトで
 ■ Docker enabled. See our stacks documentation for more details.

のチェックが入っています。チェックを外すと旧版のBOXが使われます。



f:id:katlez:20160204163906p:plain
アプリの設定画面で後で切り替えることもできます。(上画像参照)
settingsからDockerを使うかWercker Registryのbox (classic)を使うか選択できます。

wercker.yml の設定

werckerでテストを回す際に、実行コマンドなどはwercker.ymlを参照して行われます。
wercker.ymlはテストしたいディレクトリのルート直下に置いておきます。

box: katlez/wercker-php-ruby
services:
  - id: mysql
    tag: 5.5
    env:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: test_db
      MYSQL_PORT_3306_TCP_ADDR: 172.17.0.2
      MYSQL_PORT_3306_TCP_PORT: 3306

build:
  steps:
    - install-packages:
        packages: cmake
    - script:
        name: Update apt
        code: |
          sudo apt-get update
    - script:
        name: Install dependencies
        code: |
          sudo apt-get install -y php5-mysql curl libcurl3 libcurl3-dev php5-curl
          docker-php-ext-install bcmath
          docker-php-ext-install pdo_mysql curl
          apt-get install php5-json
          curl -sS https://getcomposer.org/installer | php
          composer install
    - script:
        name: db connect
        code: |
          php config/db.php
          vendor/robmorgan/phinx/bin/phinx migrate -e development
    - script:
        name: Gem Nokogiri install
        code: bundle config build.nokogiri --use-system-libraries
    - script:
        name: bundle install
        code: bundle install
    - script:
        name: RSpec
        code: bundle exec rspec spec

box

現在のWerckerはDockerベースで動かすことを推奨するv2です。

昔の書き方

box: wercker/php

これでWerckerRegistryに置いてあるboxイメージを参照してきて環境構築されます。
https://app.wercker.com/#explore

↑ WerckerRegistry

現在の書き方

box: katlez/wercker-php-ruby

Dockerを使用する設定をした上で、上記のように書きます。
これでDockerHubに置いてある、Dockerイメージを参照してきて環境構築されます。
https://hub.docker.com/r/katlez/wercker-php-ruby/

↑ DockerHub

services

servicesはbox:で作った環境上に使いたいミドルウェアをDockerHubから持ってきてビルドしてくれます。今回はmysqlを使っています。
id: で使いたいソフトウェアを指定します。 他には、mysql postgres mongodb etc... があります。
env: で環境変数を指定します。MYSQL_ROOT_PASSWORD 以外はオプションでの設定です。
MYSQL_DATABASE:でデータベース名を指定しておくと、service実行時に勝手にDBも作成しておいてくれるので便利です。

services:
  - id: mysql
    tag: 5.5
    env:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: test_db
      MYSQL_PORT_3306_TCP_ADDR: 172.17.0.2
      MYSQL_PORT_3306_TCP_PORT: 3306

Wercker Registry

wercker には wercker Registryと呼ばれる DockerHubのようなものがあります。以下の画像参照

f:id:katlez:20160210012426p:plain

wercker v1の時のbox情報が置いてあったり、Stepsの時に動かす処理情報がまとめて置いてあったりします。
v2ではboxの方は使いませんがStepsの方の処理では使ったりします。

f:id:katlez:20160210012444p:plain

こんな感じでsteps情報が登録されています。

https://app.wercker.com/#applications/51c829d13179be44780020be/tab/details

この↑の処理ををwercker.ymlのstepsのところに

steps:
  - wercker/bundle-install@1.1.2

と、書くと。コマンドでbundle installをするのと同じ処理を回せます。わざわざscriptで3行ほど書くよりも簡潔に一行で処理が回せるので見やすくなりますし簡潔で分かりやすいです。

WerckerRegistryにあるStepsは積極的に使っていきましょう。と言いたいところですが、あまり活発に活動されてるRegistryでもないので置いてある処理は少なめです。。。。^^;

https://app.wercker.com/#applications/53e31d00631d554c4802d374/tab/details
Wantedlyの方が作られたslack通知のstepsなどはとても便利です!