如何将程序集版本设置为 Jenkins 内部版本号?

How to set assembly version to Jenkins build number?

我在 Jenkins 中使用 "Change Assembly Version" 插件来更新我的 ASP.NET MVC 项目的所有 AssemblyInfo.cs 文件,以便在构建过程中应用版本号。如果我将 "Assembly Version" 值设置为硬编码值,则效果很好。

但我的要求不同 - 我想在版本号中使用内部版本号。例如,“1.1.0.25”,其中 25 是内部版本号,由 Jenkins 自动生成。简而言之,版本应该像“1.1.0.<>”

我可以使用 TFS 环境变量在 TFS 构建过程中执行此操作,我是 Jenkins 的新手,不确定我们如何在 Jenkins 中实现此操作。 以下是来自 Jenkins 的 "Change Assembly Version" 插件的截图,供您快速参考:

提前致谢

太棒了,我自己找到了答案。

基本上,我必须在 "Change Assembly Version" 插件

的 "Assembly Version" 字段中输入“1.0.0.$BUILD_NUMBER”

对于其他希望仅更新版本号的 1 个但保留其余现有版本号的人,您可以按如下方式设置 "Change Assembly Version" plug-in:

Assembly Version: $BUILD_NUMBER
FileName: <project folder>/Properties/AssemblyInfo.cs
RegexPattern: Assembly(\w*)Version\("(\d+).(\d+).(\d+).(\d+)"\)
ReplacementPattern: AssemblyVersion("..%s")

这将保留现有的、已包含在程序集中的前 2 个数字???版本设置并将第 3 个版本号设置为当前 Jenkins 内部版本号。

示例

AssemblyInfo.cs 包含:

[assembly: AssemblyVersion("1.40.0.0")]
[assembly: AssemblyFileVersion("1.40.0.0")]

如果 Jenkins 内部版本号为 103,则在 Change Assembly Version 插件使用上述设置后,AssemblyInfo.cs 将包含:

[assembly: AssemblyVersion("1.40.103.0")]
[assembly: AssemblyFileVersion("1.40.103.0")]

Note

If you are using subversion (and likely other source control systems) and are using the "Check-out Strategy" of "Use SVN update as much as possible" you will have to change it to "Use SVN update as much as possible with svn revert before update" to ensure that the modified AssemblyInfo.cs file is reset for the next build.

之前关于如何为 Jenkins 使用 "Change Assembly Version" 插件的回答无效。 在我的 AssemblyInfo.cs 文件中,我通常将它们设置为自动递增版本以帮助本地开发人员工作。

例子

AssemblyInfo.cs 包含:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

在 Jenkins 构建之后如果版本是 10 那么 AssemblyInfo.cs 将包含:

[assembly: AssemblyVersion("1.0.10")]
[assembly: AssemblyFileVersion("1.0.10")]

插件是这样使用来实现上面的:

Assembly Version: $BUILD_NUMBER
FileName: 
RegexPattern: Assembly(\w*)Version\("(\d+).(\d+).(\*)"\)
ReplacementPattern: AssemblyVersion("..%s")

我在使用插件时遇到的另一个错误是文件权限不允许写访问。为了解决这个问题,找到 AssemblyInfo.cs 并禁用 "Read Only".

希望对大家有帮助。

我最近不得不在没有“Change Assembly Version”插件的情况下执行此操作。我只是改用了 PowerShell 脚本。我将 post 放在这里,因为它可以为需要它的人提供更多的灵活性:

if (Test-Path env:BUILD_NUMBER) {
    Write-Host "Updating AssemblyVersion to $env:BUILD_NUMBER"

    # Get the AssemblyInfo.cs
    $assemblyInfo = Get-Content -Path .\MyShinyApplication\Properties\AssemblyInfo.cs

    # Replace last digit of AssemblyVersion
    $assemblyInfo = $assemblyInfo -replace 
        "^\[assembly: AssemblyVersion\(`"([0-9]+)\.([0-9]+)\.([0-9]+)\.[0-9]+`"\)]", 
        ('[assembly: AssemblyVersion("...' + $env:BUILD_NUMBER + '")]')
    Write-Host  ($assemblyInfo -match '^\[assembly: AssemblyVersion')
        
    # Replace last digit of AssemblyFileVersion
    $assemblyInfo = $assemblyInfo -replace 
        "^\[assembly: AssemblyFileVersion\(`"([0-9]+)\.([0-9]+)\.([0-9]+)\.[0-9]+`"\)]", 
        ('[assembly: AssemblyFileVersion("...' + $env:BUILD_NUMBER + '")]')
    Write-Host  ($assemblyInfo -match '^\[assembly: AssemblyFileVersion')
        
    $assemblyInfo | Set-Content -Path .\MyShinyApplication\Properties\AssemblyInfo.cs -Encoding UTF8
} else {
    Write-Warning "BUILD_NUMBER is not set."
}