Jenkins 復旧

GlassFish アップデートで障害発生から止まっていた Alfa.linuxfront.com の Jenkins がようやく復旧しました。

何が問題を起こしていたのかを簡潔に書けば、GlassFish 4.1 のクラスター インスタンスに配置していたために Jenkins初期化に失敗していたということでした。単一のスタンドアローン インスタンスに配置替えをしたことにより初期化に失敗することもなくなり、ひとまず平常運転に戻れそうです。

不思議なのは、前バージョンの GlassFish 4.0 ではクラスター インスタンスでも動いてたってことなんですよね。4.1 で動作が変わったのでしょうか。

GlassFish アップデートで障害発生

このサイトで稼働させてきた GlassFish 4.0 を新しい 4.1 にアップデートしたら Jenkins が動かなってしまいました。

GlassFish 4.0 は 4.1 のスナップショットより不安定だとか話があったので、Update Tool を使って 4.1 にアップデートして起動したら…動かない…あれ?

そんな訳で、コンフィギュレーションをゼロから作り直したり、必要もないのに (1台でw) クラスターにしていたのをシングル サーバーに変えたりとか、試行錯誤してみた結果、WordPress は復旧したものの Jenkins はどうやっても初期化エラーで動かないという問題が解消できませんでした。クラス ローダーの挙動に影響されてるように見えるんですがねえ。

本の紹介『テスト駆動開発による組み込みプログラミング』

以前にも紹介したかなと思いつつ、テスト駆動開発 (TDD) の本です。この本は組み込みプログラミングに TDD を適用する手法を扱っていて、実機テストが十分にできないことによる品質の低下や手戻りに伴う遅延に対して、あらかじめテスト可能なコードを書いておくという一つの解を示しています。

手短に書けば、PC でテスト可能なように作っておけば、実機がなくとも論理的に明らかな誤りを早期に発見することができるので、実機テストへの依存を減らすことができるということですね。これを実際に実行できるプロジェクト チームが現実にどれだけあるのか疑問です。

PHP について

どうでも良い話ですが、私は個人的に PHP が嫌いなのです。それが Quercus で WordPress を動かしている一つの理由。

それでも WordPress を使う理由は、PHP 以外で書かれた WordPress に匹敵するソフトウェアが見つけられなかったこと。全くどういうわけか、広く使われている Web アプリケーションの多くが PHP で書かれているので避けては通れない。

避けて通れないなら、別の方法 (Quercus) を使ってやろうというのがせめてもの抵抗であるわけです。

Quercus で動かす WordPress で見つかった問題点 2

Quercus で使うときの問題点はまだあったな。忘れてた。

タイムゾーン設定で Asia/Tokyo を選択すると、それ以降の設定項目が表示されなくなりました。とりあえず UTC+9 に設定して回避したけども、一度この状態になっちゃうと Web からは修復できなくなるので MySQL を直接叩いて直すはめになります。

WordPress の pingback 不具合

WordPress pingback がどうも機能してないっぽいのはこれのせいか?

…/wp-includes/class-http.php:1279: Warning: CURL option ‘10065’ unknown or unimplemented

オプション 10065 は CURLOPT_CAINFO で、非正規の SSL 証明書を使用するサーバーの発行元 CA を指定する機能のようなのだが、どうも WordPress の pingback サーバーがこれに該当してしまうらしい。

一応 Quercus にバグ報告しておいた。

Quercus で動かす WordPress で見つかった問題点

Quercus を使って Java アプリケーション サーバーで WordPress を稼働させているのは既に書いたとおりですが、WordPress からのメール送信でサブジェクトが割れて本文に入ってしまうという問題がある模様です。コメント モデレーションの通知で発覚しました。

時間が許せば原因を探ってみたいと考えていますが、いつになることでしょうね? (^^)

Jenkins 解説書

オライリーから出版されている Jenkins の解説書です。Java 以外のネイティブ言語の自動ビルドがどの程度まで自動化できるのか調べたかったので購入したものですが、基本的に Java 中心でそれ以外はシェルでコマンドを書けばどんなことでもできるというぐらいしか書いてなかったので、本来の目的からすれば参考程度でした。Java がメインならこれだけでも十分役に立つと思います。

Quercus を使って WordPress を動かしてみた

Java で書かれた PHP 互換処理系として Quercus というものがあります。PHP で書かれたアプリケーションを Java アプリケーション サーバー上で動作させることができるというものですが、実はこのブログを書いている WordPress も Quercus 上で動かしていたりします。

実のところ WordPress を Quercus で動かすためには、いくつか越えなければいけないハードルがあったわけなので、そのいくつかをここに記しておきます。

文字化け

最初に気が付くのはやはり文字化けでしょう。これにはいくつか理由が挙げられますが主なものは次の二つです。

  • PHP が基本的にマルチバイト文字列であるのに対して Java は UTF-16 を使っている。
  • WordPress が MySQL に特化していることにより JDBC との不整合がある。

最初のものは WEB-INF/php.ini (Quercus の php.ini ファイル) で unicode.semantics = 1 として PHP6 のように Unicode を使うように指定することで回避することができる場合もありますが、PHP6 はキャンセルになった模様ですし、別のところで問題が出る可能性があるのでここでは使いません。代わりに、Java を騙して UTF-8 マルチバイト文字列を ISO-8859-1 だと思わせる方法を取ります。そのために WEB-INF/php.ini ファイルで mbstring.internal_encoding = UTF-8 と指定します。

しかしこれだけでは JDBC ドライバーが勝手に Unicode に変換して MySQL テーブル上で文字化けを誘発しますので、もう一手売っておく必要があります。何をするかというと、MySQL の JDBC クライアントのプロパティで characterEncoding=ISO8859_1 と指定するだけです。

こんなことをすると普通なら逆に文字化けを引き起こしそうなものですが、WordPress の MySQL 特化設計のおかげで、MySQL サーバー側には適切なエンコーディングが設定がされるので、JDBC ドライバーは何も知らずにバイト列を素通してしまって文字化けが回避されるという望ましい結果が得られます。

ほかにも手間取りそうなところはありますが、今回はここまでとします。