ボクココ

個人開発に関するテックブログ

PaaS上で外部Jenkinsのビルドを実行させる

Jenkinsってビルドしてテストしてリリースして・・・みたいな使い方が一般的ではあるが、
ほかに決まった処理を実行させるためのプラットフォームとしても大変役に立つ存在だ。

今回はちょっと一風変わったJenkinsの使い方を紹介する。
このやり方をすると、Jenkinsを用意するだけでPaaS環境ではインストール困難なソフトウェアを使った処理をリモートで実行する環境ができ、様々な自動化を行える柔軟性の高いWebアプリを作ることができるようになる。


やりたいこと

PaaS上で作ったWebアプリで、ワンクリックである決まったWebタスクを実行したい。

Webブラウザの自動化として、今回はCasperJSを使った。
これを使うと、シンプルなJavaScript or CoffeeScriptでスクレイピングを行ってくれる。例えばあるページにいってそこにあるテキストボックスに値を入力してボタンを押すとか、毎日変わるあるページのデータをとってきてファイルに保存するなどが自動で簡単に作れる。
これをJenkinsのサーバにインストールする。

Jenkinsジョブ作成

Jenkinsで新規フリースタイルJobを作成する。
git clone でCasperJS用の.js or .coffee ファイルをclone.
シェルの実行で casperjs ~~.js
実行結果は.js ファイル内でテキスト形式で保存するか、標準出力をリダイレクトしてファイルに保存
成果物としてその生成したファイルを指定

PaaS (Rails アプリの場合)

hudson-remote-api Gem を bundle install
これを使い、Model内にJobクラスを作って実行できるようにする。

ちなみに、Proxy環境下にJenkinsを置いている場合、このGemは今のところ使えないので、
パッチを当てたhudson-remote-api を使えばできる。現在この追加をプルリクエストで申請中。

これでボタンワンクリックでremote の Jenkins のJobを実行させる。
ジョブが終わるまで待つことができ、終わった瞬間に成果物を持ってきてJsonのレスポンスとして返すようにすれば、Jenkinsとの連携が無事できる。

まとめ

CasperJS と Jenkins, Rails アプリを繋げて、みんながいつもやっている同じようなことを自動化し、喜ばせてあげましょう!