Wercker 基礎 + 外部構成図 + 内部構成図 #wercker
概要
継続的デリバリプラットフォーム Wercker の基礎と外部構成図、内部構成図
Wercker とは?
Wercker は頻繁にテストやデプロイを行う開発者のための継続的デリバリ( CD )プラットフォーム。
継続的デプロイを利用することで、エンジニアはソフトウェア開発のおけるリスク・浪費を減らす。
Wercker 外部構成図
外部とのやりとりに視点をおいた場合の Wercker の構成は以下のようになっています。
git リポジトリへの push をトリガーとして、 wercker を呼び出し、
Buildpipeline にて各種処理を実行し、
クラウドへのデプロイを行います。
※最後に、 Wercker 内部に視点をおいた構成図を紹介します。
Wercker pipeline
Wercker にはアプリケーションを配布するためのステップとフェーズのセットからなる
パイプラインという概念があります。
続いて、 Wercker pipeline の構成要素について説明します
Builds
Builds は wercker pipeline の Build のための各ステップの実行結果です。
Builds が成功すれば、配布可能なパッケージを作成します。
wercker pipeline は wercker.yml
に記述します。
wercker pipeline は Box と Service からなるサンドボックス環境の中で実行されます。
Git Push
各 git push
に対して、 wercker は branch の種類を問わず
新しい Build をトリガーします。
wercker は SSH鍵 でリポジトリを clone し、Build を実行します。
Box
wercker pipeline を実行する Box は、
OS と パッケージのセットからなります。
Wercker は boxes を用意してくれていますが、
自分で作成することも可能です。
Box の利用は、 wercker.yml
の box 要素で記述します。
ruby の Box を使う場合は、以下のようになります。
box: wercker/ruby
Services
Services は DB ・ メッセージキュー など他のソフトウェアプロセスを実行する
Box です。
Services は Buildpipeline 側で作られる。
Service の指定は、 wercker.yml
の services 要素で記述します。
ruby の Box と MySQL の Service を使う場合は、以下のようになります。
box: wercker/ruby
services:
- wercker/mysql
サービスを追加すると、該当サービス向けの新たな環境変数をダッシュボードから設定可能になります。
Steps
Build の Steps は wercker.yml
の build 配下に定義します。
box: wercker/ruby
build:
steps:
- bundle-install
- script:
name: Run RSpec
code: bundle exec rspec spec
bundle-install
は wercher の組み込み機能で、 bundle install
を実行します。
script
は name
と code
のセットで利用し、
name
は、 build の実行時の GUI 表示名に利用されます。
code
はシェルを記述できます。
steps は順次実行されます。
Package
Package は build の最後に実行され、デプロイ可能なパッケージを作成します。
このパッケージは、 deployment pipeline の入力にすることができます。
middleman で静的サイトを build して、 heroku にデプロイする
wercker.yml
が下記になります。
build:
steps:
# Execute the bundle install step, a step provided by wercker
- bundle-install
# Execute a custom script step.
- script:
name: middleman build
code: bundle exec middleman build --verbose
deploy:
steps:
- heroku-deploy
Deploys
deploy pipeline は、 build をパスしたパッケージを配布します。
deploy pipeline は wercker.yml
の deploy 要素を利用して記述します。