10

現在、Jenkins の「バージョン番号プラグイン」を使用して、ビルド バージョンの環境変数を設定しています。これはジェンキンス内で正常に動作しますが、これを MSBuild に渡す方法が必要なので、exe と dll のバージョン番号が更新されます。以下の構成を試しましたが、ビルドのバージョンが更新されません

バージョン番号の設定

ビルド構成

4

5 に答える 5

5

環境変数名は、次のようにパーセントマーク('%')なしで記述する必要があります。

VERSION

それとは別に、あなたは行ってもいいと思います。


${BUILDS_ALL_TIME}
に変更することも検討できます
${BUILDS_ALL_TIME, XX}

(これにより、先行ゼロを含む2桁のビルド番号が適用されます)

于 2012-09-11T14:59:07.027 に答える
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)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)"
    ReplacementText="$1(&quot;$2.$(SVN_REVISION)&quot;)" 
    Condition="$(SVN_REVISION) != '' "/>
</Target>
于 2013-02-23T21:15:52.350 に答える
0

これに対する非常に簡単な回避策は、msbuild タスクの前に powershell タスクを作成することです。これは、VERSION 変数を上記のように (%% なしで) 定義したことを前提としています。そして、ビルド開始前にワークスペースの削除をチェックしました。

これは、powershell タスクのコードです。

gci -rec -Filter *AssemblyInfo* | ForEach { (Get-Content $_.FullName) | ForEach-Object {$_ -replace "1.0.0.0",$env:VERSION } | Set-Content $_.FullName}
于 2015-10-29T01:26:20.063 に答える