0

Mavenの目標を実行するハドソンの仕事があります。この Maven ゴールが実行される前に、ビルドの開始前に実行するステップを追加しました。これは、「ゴールとオプション」フィールドで使用するバージョン番号を取得するシェル スクリプトです。

私のジョブ構成では、 [ビルド環境] で [ M2 追加ビルド ステップの構成]ボックスをオンにし、ビルドの前にシェル スクリプトを追加しました。スクリプトは次のようになります。

export RELEASE={command to extract release version}
echo $RELEASE

次に、[ビルド] セクションで、'root pom' を指定します。目標とオプションでは、次のようなことができるようにしたいと考えています。

-Dbuild.release.version=${RELEASE} deploy

build.release.versionは、POM で参照される Maven プロパティですただし、シェルはその変数をグローバルにしないように見えるため、機能しません。何か案は?

私が持っている唯一の方法は、Envfileプラグインをインストールし、シェル スクリプトを取得して RELEASE プロパティをファイルに書き出してから、プラグインにファイルを読み取らせることですが、すべてを実行する順序によって問題が発生する可能性があり、次のようになります。もっと簡単な方法があるはずです...ありますか?

前もって感謝します。

4

2 に答える 2

1

私は最近同じことをしたいと思っていましたが、私の知る限り、ビルド前のシェルからジョブ環境に値をエクスポートすることはできません。このための Hudson プラグインがある場合、私はそれを見逃しています。

ただし、機能したのは、あなたが提案していたものと同様のセットアップでした: ビルド前のシェル スクリプトで必要な値をワークスペースのプロパティ ファイルに書き込み、次にパラメーター化されたトリガー プラグインを使用して別のジョブをトリガーします。それは実際に作業を行います (あなたの場合、Maven ジョブを呼び出します)。プラグインは、プロパティ ファイルから渡すパラメーターを読み取るように構成できます。したがって、最初のジョブにはシェル スクリプトとビルド後のトリガーのみが含まれ、2 番目のジョブは実際の作業を行い、環境変数として正しいパラメーターを使用できます。

シェル スクリプトの一般的な考え方:

echo "foo=bar
baz=`somecmd`" > build.properties

目標とオプションについては、次のようになります。

-Dbuild.release.version=${foo} deploy

確かに、これは望むほど洗練されたものではありませんが、最初からビルドが複数のジョブに分割されており、最初のジョブがトリガーする (つまり、それらを呼び出す) 他のジョブを実際に再利用できるため、私たちにとっては非常にうまく機能しました。異なるパラメータで)。

于 2011-05-25T07:43:18.773 に答える
0

うまくいかないというのは、RELEASE変数がmavenコマンドに渡されていないということですか?問題は、デフォルトではシェルスクリプトの各行が個別に実行されるため、環境変数が失われることだと思います。

シェル スクリプト全体を 1 つのスクリプト ファイルであるかのように実行する場合は、最初の行を次のように作成します。

#!/bin/sh

これは、シェル スクリプトのビルド手順と一緒にヘルプ情報に記載されていると思います (間違っている場合は、正しい構文を探すのに適した場所です)。

于 2010-09-02T21:52:21.373 に答える