無料ブログはココログ

« [#Redmine] Redmineによるメール対応管理(その1) - 第8回 #RxTstudy - | トップページ | [#Redmine] Redmineによるメール対応管理(その2) - 検証編 - »

[#Redmine] 立っているものはJenkinsでも使え! - ALMiniumで外道Jenkins -

「立っているものは親でも使え」と言いますが、RedmineのオールインワンパッケージでsるALMiniumを入れると、 (インストールをyとすれば) Jenkinsサーバーが立っています。これを使わない手はありません。

このJenkinsはCI(継続的統合)ツールと言われるもので、ソースのコミット時や夜間などの定時処理、あるいは必要な時に、ジョブと呼ばれるビルド処理を実行できるツールです。

このビルド処理は、MavenやAntのようなビルドツールだけでなく、シェルスクリプトでも実行可能で、Haziさんの「邪道Jenkins」やnetmark.jpの検証記事の様に様々な応用が可能です。

外道Jenkins

さて、この記事ではそんなJenkinsを、webから実行可能なシェルスクリプトとして利用したいかにも外道なjenkinsの利用例です。具体的にはALMiniumでRedmineを遊ぶ色々拡張する際に必要な、Redmineの再起動ジョブを作りました。

単に再起動するだけでは面白くないので、(ビルドツールではなく)スクリプト中でチケットの登録をAPI(を使うスクリプト)でしました。

準備(ALminiumをインストール)

MacBookAirのParalells 7 に、ubuntu Desktop 12.04 LTSとALminiumをインストールしました。こんな感じで、ざっと2時間です(すごい!)。

まず、Parallelsのメニューからubuntuを入れますが、これはALMiniumが64ビット版が対象であること(日本語チームのものは32ビット版)、仮想環境とホストOSでマウス共有やコピー&ペーストするには、仮想環境のツールを仮想環境にインストール必要があり、自力のubuntuインストールでは難しかったからです。

上記では英語版が入りますので、日本語化して各種設定します。上記の手順に抜けていますが、タイムゾーンの設定のほか、ポートフォワードの設定をしてホスト側からアクセスできる様にすると良いでしょう。

細かなところでは、ubuntuインストール後にALMiniumをインストールすると、curlのエラーとrewriteのエラーが出ましたので、上記のような順序でやり直しています。随時スナップショットを取っておくと、やり直しが簡単なので良いでしょう(もしかすると、すでに改善されているかも)。

ジョブスクリプト

ジョブのスクリプトは以下の2行です。

touch /opt/alminium/tmp/restart.txt

ruby /home/parallels/rb/redmine_issue_post.rb 1 3 "$JOB_NAME No.$BUILD_NUMBER" $BUILD_ID

再起動処理

1行目で、Redmine(というかRuby on Rails)の再起動する際は、アプリケーションのtmpに restart.txtを作成または更新します。これが面倒なので、JenkinsさんでGUI化した理由です。

ファイルの更新ができる様に、ユーザjenkinsをグループwww-dataに追加して、上記ディレクトリのグループのライトパーミッションを立てています(755->775)。

Redmineのチケット発行

2行目はRedmineのRest APIでチケットを作成しています。これにはredcuineや多機能なgodmineなどがありますが、後から独自拡張しやすい様にtakashibaguraさんのrubyスクリプトを使わせていただきました(バージョンが違うのでrequire の'json/pure'を 'json'にしました。良い修正法があればお教えください)。

引数の1と3はプロジェクトIDとトラッカーIDです。設定順の通りでしたが、念のためMySQLで確認しました。

エラー処理

スクリプトの1行目が「#!/bin/sh」のように「#」で始まっていないので(実はrubyでもperlでも書ける)、デフォルトで「-ex」付きのシェルが動きます。

このオプションが付いていると実行履歴を出力しながら、エラーが出ると底で止まります。つまり、1行目でエラーが出るとチケットは発行されません。

実行結果

上記設定の後、キャッシュの影響かうまく動かないので、OSの再起動を一度しましたが、jenkinsのjob実行でRedmineが再起動する様になりました。

JOB_NAMEが「Restrat Redmine」なので、このようなチケットになります。

Photo

まとめ

以上、そこまでしなくてもalias切るだけで良いとか、色々ご意見はあると思いますが、やってみたかったというのが正直な所です。たった2行のジョブですが、Redmineの運用や業務処理など、様々な応用の可能性を感じています。

最後に、ALMinium、Redmine、jenkins、の作者の皆様とtakashibaguraさんに感謝いたします。ありがとうございました。


« [#Redmine] Redmineによるメール対応管理(その1) - 第8回 #RxTstudy - | トップページ | [#Redmine] Redmineによるメール対応管理(その2) - 検証編 - »

Redmine」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [#Redmine] Redmineによるメール対応管理(その1) - 第8回 #RxTstudy - | トップページ | [#Redmine] Redmineによるメール対応管理(その2) - 検証編 - »