werckerのtriggerBuild APIを使ってビルドパイプラインをつくる
先日、Hugoに移行した際、ブログ本体のリポジトリとテーマのリポジトリを分けるようにしました。ブログ本体のほうはweckerと連携しておりpushすることでGitHubPagesに公開されるようにしましたが、テーマ側を更新したときも同様のことができるようにAPIを使ってビルドパイプラインっぽいのをつくってみました。
triggerBuild API
werckerが提供するビルドをキックするためのAPIです。
ここの手順に従い、トークンを取得して利用します。
curl -H 'Content-Type: application/json' \
-H "Authorization: Bearer <token>" \
-X POST -d '{"applicationId": "<applicationId>", "branch":"master", "message":"<your custom message>"}' \
https://app.wercker.com/api/v3/builds
のようにして使います。
applicationId
は、ビルドを実行したいアプリケーションのIDです。
自分の登録しているアプリケーションのURLにIDがついているのでそこで確認できます。
https://app.wercker.com/#applications/<applicationId>
ビルドパイプライン
あとは特定のアプリケーションのビルドから、他のアプリケーションのビルドを呼ぶように設定するだけです。
wercker.yml
自分の場合、テーマのリポジトリのほうに以下のようなwercker.ymlをおいています。
box: debian
build:
steps:
- script:
name: echo
code: |
echo 'Update theme'
deploy:
steps:
- script:
name: install curl
code: |
apt-get update
apt-get -y install curl
- script:
name: trigger THINKING MEGANE build
code: |
curl -H 'Content-Type: application/json' -H "Authorization: Bearer $WERCKER_TOKEN" -X POST -d "{\"applicationId\": \"$WERCKER_APP_ID\", \"branch\":\"master\", \"message\":\"Update theme\"}" https://app.wercker.com/api/v3/builds
buildのstepはwerckerで必須のようなのでダミーを入れています。
(指定しないと Failed step: setup environment - No 'build' pipeline definition in wercker.yml
エラーが出ます)
wercker
wercker側では Deploy targets
> Custom Deploy
を選択し、Auto deploy
にチェックを入れておきます。
wercker.ymlで指定した、WERCKER_TOKENとWERCKER_APP_IDもここの Deploy pipeline
> Add new variable
で追加します。
少なくともWERCKER_TOKENはprotected
にチェックを入れるのを忘れないようにしましょう。
ビルド
あとは、テーマのリポジトリにpushするとブログのほうで設定したGitHub Pagesへの公開するビルドが実行されます。 ブログコンテンツ側のビルド設定は、前回のエントリを参考にしてください。
ビルド起動がAPIでできるとビルドパイプラインだけでなく、いろいろ応用できそう。 werckerのAPIは最近充実してきているようなのでいいですね。