現在、Jenkins の「バージョン番号プラグイン」を使用して、ビルド バージョンの環境変数を設定しています。これはジェンキンス内で正常に動作しますが、これを MSBuild に渡す方法が必要なので、exe と dll のバージョン番号が更新されます。以下の構成を試しましたが、ビルドのバージョンが更新されません
5 に答える
環境変数名は、次のようにパーセントマーク('%')なしで記述する必要があります。
VERSION
それとは別に、あなたは行ってもいいと思います。
${BUILDS_ALL_TIME}
に変更することも検討できます
${BUILDS_ALL_TIME, XX}
(これにより、先行ゼロを含む2桁のビルド番号が適用されます)
これは、GlobalAssemblyInfo.cs ファイルのリビジョン番号を Jenkins の SVN_REVISION 変数に置き換える MSBuild ターゲットです。
各プロジェクトが共通情報 (バージョンなど) に対して同じ GlobalAssemblyInfo を参照するマルチ プロジェクト ソリューションがあります。セットアップに合うようにこれを変更します。
Exists 条件を設定することで、MSBuildCommunityTasks がインストールされていない開発者のコンピューターでターゲットが実行されます。そのような場合、GlobalAssemblyInfo.cs のバージョン番号は変更されません。
<Target Name="InjectSVNRevision" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')">
<!-- When this build is done by the Jenkins CI server; the svn revision number is set in the environment variable SVN_REVISION
This little snippet replaces the revision number in GlobalAssemblyInfo.cs with this svn revision number
-->
<Message Text="Injecting SVN revision number in GlobalAssemblyInfo.cs" />
<FileUpdate Files="GlobalAssemblyInfo.cs"
Multiline="true"
Singleline="false"
Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\("([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?"\)"
ReplacementText="$1("$2.$(SVN_REVISION)")"
Condition="$(SVN_REVISION) != '' "/>
</Target>
これに対する非常に簡単な回避策は、msbuild タスクの前に powershell タスクを作成することです。これは、VERSION 変数を上記のように (%% なしで) 定義したことを前提としています。そして、ビルド開始前にワークスペースの削除をチェックしました。
これは、powershell タスクのコードです。
gci -rec -Filter *AssemblyInfo* | ForEach { (Get-Content $_.FullName) | ForEach-Object {$_ -replace "1.0.0.0",$env:VERSION } | Set-Content $_.FullName}