ビルド サーバーとして Hudson の実験を開始しました。私はSubversionを使用しており、毎分ポーリングするように構成しています。私が見ている問題は、リビジョン 10 でのビルドに 5 分かかり、その間に 5 つのコミットがある場合、Hudson は次にリビジョン 15 をビルドすることです。
すべてのリビジョンが確実にビルドされるようにする方法はありますか?
ビルド サーバーとして Hudson の実験を開始しました。私はSubversionを使用しており、毎分ポーリングするように構成しています。私が見ている問題は、リビジョン 10 でのビルドに 5 分かかり、その間に 5 つのコミットがある場合、Hudson は次にリビジョン 15 をビルドすることです。
すべてのリビジョンが確実にビルドされるようにする方法はありますか?
各リビジョンを正確にビルドするには、いくつかのことを行う必要があります。
REVISION
文字列パラメータをジョブに追加します${REVISION}
パラメータをリポジトリURLに追加します。https://server/path/myproject${REVISION}
REVISION
変数はURLでのみ展開されるため、ローカルフォルダーの名前を「myproject」に設定します(前の例を参照)が、フォルダーを作成するときに、Hudsonはフォルダーを展開せず、次の名前のフォルダーになります。myproject${REVISION}
/usr/bin/wget \
--auth-no-challenge \
--no-check-certificate \
--user=me \
--password=mypasswd \
https: //server/path/job/jobname/buildWithParameters?delay=0sec\&REVISION=%40$REV \
-O /dev/null
ビルドを手動でトリガーする場合は、次の2つの可能性があります。
このトリックはすべて、Subversionプラグインがとして@
解釈するという事実に依存しているため、符号は非常に重要です。を忘れた場合、Subversionはフォルダが見つからないと言うだけです。これが、wgetコマンドの間に配置する必要がある理由でもあります。これはのエスケープ文字です。URL@NNN
get revision NNN from repository at URL
@
https://server/path/myprojectNNN
%40
REVISION=
$REV
%40
@
ビルド構成の SCM 部分には、Build Triggers セクションとオプション "Trigger builds remote (eg, from scripts)" が必要です。そのオプションの横にあるヘルプ情報によると、コミット後のアクションをスクリプト化して、すべてのコミットが新しいビルドを起動するようにすることができます。hudson にはビルドのキューがあるため、すべてのリビジョンをビルドする必要があります。
役立つリンクは次のとおりです。https://hudson.dev.java.net/build.html
パラメーターを使用してビルド ジョブを開始する方法の例を次に示します (詳細については、私のコメントを参照してください): http://wiki.hudson-ci.org/display/HUDSON/Parameterized+Build
すべてのコミットが Hudson でビルドされていることを確認するための鍵は、「パラメーター化されたビルド」であり、異なるパラメーター値を持つ IF トリガー ビルドのみです。hudson はそれが新しいビルドであると判断し、ビルド キューに保持する必要があります。もしくは、ハドソンが過去作と比べて無意味なビルドと判断して収録しない
たとえば、[Build Now] をクリックしてビルドを 3 回トリガーし、ビルド パラメータを「null」のままにしておくことができます。最初の 2 つのビルドのみが Hudson キューにあることがわかります。3番目のものは無視されます:Pクールですが、いくつかのドキュメントでは見つからないのは本当に悪いことですが、何度も私の実験で見つかりました:(
上記の fchateaus アプローチを採用し (ありがとうございます!)、Mercurial で動作するように修正しました。
中央サーバーで .hg/hgrc を編集し、changegroup フックを配置する必要があります。変更グループは最初の変更セットのみを HG_NODE 環境変数に設定することに注意してください。そのため、hg ヒントを実行して実際のヒント ノードを取得し、代わりにそれを URL 経由で渡す必要があります。ワンライナーで行うにはちょっとしたトリックですが、私はそれを理解しました.
これは、Windows上で動作する Hudson に対して行うことです。
[hooks]
# this uses wget to hit the hudson url responsible for starting a build - %HG_NODE% only gets first changeset of changegroup, so use hg tip to grab changeset most recently added instead
changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/buildWithParameters?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G
# TODO: when Hudson implements polling with parameters, change to something like this
#changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/polling?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G