2010-12-03 8 views
1

ハドソンでは、作成するビルドのタイプ(QA、ステージ、プロダクション)の1つのパラメータしか取らない、パラメータ化されたビルドを設定したいと考えています。しかし、これらのビルドのそれぞれは、いくつかの異なる環境変数を設定する必要があります。 (擬似コード)のようなもの:ハドソンでは、1つのパラメータで複数の環境変数を設定するにはどうすればよいですか?

if ${CONFIG} == "QA" then 
    ${SVN_PATH} = "branches/dev" 
    ${BUILD_CONFIG} = "Debug" 
    # more environment variables... 
else if ${CONFIG} == "Production" then 
    ${SVN_PATH} = "trunk" 
    ${BUILD_CONFIG} = "Release" 
    # more environment variables... 
else # more build configurations... 
end if 

私たちのビルドで、無数のステップがありますが - 、MSBuildのコマンドを組み合わせて実行し、転覆から引くDOSのバッチファイル、およびPowerShellスクリプト。

私たちは、通常、Hudsonインターフェイスからビルドをスケジュールします。パラメータエントリはできるだけ馬鹿にならないようにします。

これを行う方法はありますか?

答えて

6

リリースのために非常に多くのことを行っているので、ハドソン以外のすべての手順をスクリプト化する方法はありますか?あなたは、アリ、バッチファイル、または好みのスクリプト言語を使用することができます。そのスクリプトをあなたのscmに入れてリビジョンコントロールを取得してください。

プロの:

  • ハドソンが唯一のスクリプトを呼び出しますので、あなたは、ハドソンの外にロジックを取得します。
  • シェル(グローバル変数)間で永続化する必要がある環境変数を作成する必要はありません。
  • あなたは
  • ハドソンジョブ設定取得の方法
  • より簡単に必要がある場合は、ハドソンの外でこれらのスクリプトを実行することができます。また、バージョン管理
  • に入れなければならないすべての環境のためのconfig /プロパティファイルを使用することができます地球環境変数を変更することによる副作用はありません。常にグローバル設定を変更しないジョブを作成しようとすると、常に問題が発生するためです。
+0

私はこのアプローチに同意します。それは残念ですが、ハドソンについての私の好きなことの一つは、仕事に最適なツールを選んで使用することです。それでも、私が使うほど、「シェルスクリプトを実行する」以外のすべてのオプションを無視することは、唯一真に維持可能なソリューションだと思います。 – roufamatic

+0

合意しました、これは私の答えの段落2で私が得たものです。プロのリストは+1。 –

2

ハドソンはビルドパラメータをサポートしています。ビルドパラメータは、ハドソンがビルドステップの環境変数として使用できるビルド時変数です(Hudson Parameterized Build wikiページを参照)。あなたの仕事では、ユーザが入力する1つの選択肢パラメータCONFIGを持つことができます。

次に、ビルドステップの開始時に擬似コードで記述したものを基本的に記述することができます。また、複数の手順があるので、環境設定を既存のビルドスクリプトから参照されるファイルに入れてください。 (あなたのシェルに応じて、スクリプトに設定された変数を親環境にエクスポートするための様々なトリックがあります。)既存のビルドスクリプトと統合されたファイルにセットアップを置くと、管理とテストがずっと簡単になりますハドソンの)あなたのスクリプトをローカルで簡単に呼び出す方法を提供します。

また、統合ビルドを、説明した各構成を実行する別々のジョブに分けることも考えられます。中心的なビルドスクリプトを参照しても、あなたが定義したタイプのCONFIGは、別個のアクションでなければならず、別々の仕事をする必要があるようです。

+0

私はあなたにポイントを与えますが、これは本当に助けにはなりません。あなたが呼ぶプロセス(java、Hudsonを実行している)の環境を変更することを可能にするどんなトリックを知っていますか?私は、SETXを使って、.NETのSetEnvironmentVariableメソッドを呼び出すことを試みました。どちらもうまくいくようですが、どちらも呼び出しプロセスの環境変数セットに影響することはありません。したがって、私の異なるビルドステップによる後続の呼び出しでは、変更が表示されません。私が本当に探しているのは、SetEnvプラグインのようなものです。ただし、その周りに構造化プログラミングを少し許さなければなりません。 – roufamatic

+0

つまり、最初のビルドステップで 'setx'を使っても動作せず、2回目のビルドステップで変数を取得できません。 –

+0

それは正しいです。それは珍しいことですか? – roufamatic

関連する問題