CIプラットフォームをCruiseControlからJenkinsに変換していますが、比較的簡単に実行できるはずのことを理解できないようです(免責事項-私はCIでもビルド自動化の専門家でもありませんが、これは私の膝に捨てられましたそして私はそれが面白いと思います)
CruiseControlでは、次のような変数を宣言できます。
<cb:define rootdir="J:\SOURCES\" />
<cb:define logdir="J:\SOURCES\buildlogs" />
<cb:define iisdir="J:\IIS\" />
<cb:define artifacts="artifacts\" />
次に、それらをMSBuildタスクの一部として使用します
<msbuild>
<executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
<workingDirectory>$(rootdir)$(ProjectName)</workingDirectory>
<projectFile>$(ProjectName).sln</projectFile>
<buildArgs>/p:BuildDate="1";OutDir="$(iisdir)$(ProjectName)\bin\\";WebProjectOutputDir="$(iisdir)$(ProjectName)\\"</buildArgs>
<targets>Rebuild;$(ProjectName)</targets>
<timeout>180</timeout>
<logger>C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
ルートまたはIISディレクトリが変更された場合、一度にすべてのプロジェクトに簡単に適用できます。最大60のプロジェクトがセットアップされているため、プロジェクトごとにこのプロジェクトを実行するには非常に時間がかかります。これをに移行するJenkins、MSBuildコマンドライン引数は次のようになります(部分的なサンプルですが、関連するものが含まれています)。
OutDir="J:\IIS\ProjectName\bin\\";WebProjectOutputDir="J:\IIS\ProjectName\\"
IISディレクトリはハードコーディングされています。次のようなものにする必要があります:
OutDir="${IIS_DIR}\ProjectName\bin\\";WebProjectOutputDir="${ITEM_ROOTDIR}\ProjectName\\"
それを行う方法はありますか?構成スライシングプラグインを試しましたが、これは便利ですが、私が見たところ、このニーズには合いません。
グローバル変数の場合、EnvInjectプラグインが必要です。これにより、(とりわけ)グローバル(ノード)レベル、ジョブレベル、またはステップとして変数を設定できます。変数は、直接、プロパティファイル、またはスクリプトから設定できます。
設定すると、変数は、残りのJenkinsとそのステップ(スコープ内)で環境変数として使用できます。
MSBuildに引数を渡すために、MSBuildステップを構成するときに、「コマンドライン引数」を/p:Param=Value.
の形式で渡すオプションがあります。
「値」は環境変数である可能性があります。 Windows環境では、%myvar%として参照します。
したがって、EnvInjectを使用してグローバルGLOBAL_IIS_DIR=C:\path\to\IIS
を構成する場合は、コマンドラインで/p:IIS_DIR=%GLOBAL_IIS_DIR%
を使用して参照できます。
これは、組み込みのJenkinsの機能を使用して実行できます。
次に、変数を展開する必要があります。これは、実際には、どこで使用するかによって異なります。
例えば: %MSBuild%
および%IIS_DIR%
「Windowsバッチコマンドの実行」ビルドステップ。他のビルドステップ(およびプラグイン)では、使用方法が異なる場合があります。