前にやった続き
せっかく Hudson を使ってるのでビルドの際にリビジョン番号以外にもビルド番号を埋め込みたいなぁと考えた。
今の環境では SVN のコミットをトリガにして Hudson を起動しているので、コミット → ビルド → 成果物 の流れは出来ている。
で、実際に使用している実行ファイルがどれなのかを識別するために、ビルド番号とリビジョン番号を埋め込みたくなった。
結果からすると下のようなファイルを Hudson のビルドの一番最初に作成し、それをプログラムのビルド時に読み込むようにさせた。
#ifndef BUILD_H_INCLUDE #define BUILD_H_INCLUDE #define JOB_NAME "Test" #define BUILD_ID "2009-02-10_21-12-37" #define BUILD_TAG "hudson-Test-7" #define BUILD_NUMBER "7" #define SVN_REVISION "2" #endif // #ifndef BUILD_H_INCLUDE //eof
Hudson でのビルド番号とリビジョン番号の取得
Hudson で、Hudson のビルド番号と SVN のリビジョン番号は、以下のような環境変数をしようすることで簡単に取得できる
シェルスクリプトでは、次の変数を利用できます。
- BUILD_NUMBER:当該ビルドの番号。例 "153"
- BUILD_ID:当該ビルドID。例 "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss)
- JOB_NAME:ビルドのプロジェクト名。例 "foo"
- BUILD_TAG:文字列 "hudson-${JOBNAME}-${BUILD_NUMBER}"。 簡易な識別子として、リソースファイルやjarファイルなどに付与するのに便利です。
- EXECUTOR_NUMBER:このビルドを実行している現在のエグゼキューターを識別する(同一マシンの中で)ユニークな番号。 "ビルド実行状態"に表示されている数字ですが、1ではなく0から始まる数字です。
- JAVA_HOME:特定のJDKを使用するようにジョブを設定する場合、そのJDKのJAVA_HOMEをこの変数に設定します。 この変数を設定すると、PATHに$JAVA_HOME/binが追加されます。
- WORKSPACE:ワークスペースの絶対パス。
- HUDSON_URL:HudsonのURL。例 http://server:port/hudson/
- SVN_REVISION:Subversionを使用するプロジェクトにおける、モジュールのリビジョン番号。
- CVS_BRANCH:CVSを使用するプロジェクトにおける、モジュールのブランチ。 CVSがトランクをチェックアウトする場合は設定されません。
バッチファイルの実行
ビルドに先立って Windows バッチコマンドにて上記データを C/C++ のヘッダファイルとして出力する。
set file=build.h
svnversion>%file%
set /p rev=<%file%
echo #ifndef BUILD_H_INCLUDE >%file%
echo #define BUILD_H_INCLUDE >>%file%
echo.>>%file%
echo #define JOB_NAME "%JOB_NAME%">>%file%
echo #define BUILD_ID "%BUILD_ID%">>%file%
echo #define BUILD_TAG "%BUILD_TAG%">>%file%
echo #define BUILD_NUMBER "%BUILD_NUMBER%">>%file%
echo #define SVN_REVISION "%SVN_REVISION%">>%file%
echo.>>%file%
echo #endif // #ifndef BUILD_H_INCLUDE>>%file%
echo //eof>>%file%
正常に終了すると、このような内容のヘッダファイルが出来あがる。
#ifndef BUILD_H_INCLUDE #define BUILD_H_INCLUDE #define JOB_NAME "Test" #define BUILD_ID "2009-02-10_21-12-37" #define BUILD_TAG "hudson-Test-7" #define BUILD_NUMBER "7" #define SVN_REVISION "2" #endif // #ifndef BUILD_H_INCLUDE //eof
こいつを組み込んでビルドすれば成果物として照合可能な実行ファイルが生成される。