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

时间:2015-11-03 10:29:44

标签: jenkins environment-variables jenkins-plugins

我正在使用"更改程序集版本" Jenkins中的插件,用于更新ASP.NET MVC项目的所有AssemblyInfo.cs文件,以在构建过程中应用版本号。如果我设置"汇编版本"对于硬编码的值,这非常有效。

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

我可以使用TFS环境变量在TFS构建过程中执行此操作,我是Jenkins的新手,并且不确定如何在Jenkins中实现此目的。 以下是"更改程序集版本" Jenkins的插件供您快速参考:

enter image description here

提前致谢

4 个答案:

答案 0 :(得分:7)

以前关于如何使用Jenkins的“更改程序集版本”插件的答案不起作用。 在我的AssemblyInfo.cs文件中,我通常使用自动递增版本来设置它们以帮助本地开发工作。

实施例

AssemblyInfo.cs包含:

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

如果版本为10,则在Jenkins构建之后,AssemblyInfo.cs将包含:

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

这样使用插件来实现上述目的:

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

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

希望能帮到任何人。

答案 1 :(得分:6)

对于其他希望仅更新1个版本号但保留其余现有版本号的人,您可以设置“更改程序集版本”插件,如下所示:

  

汇编版本: $ BUILD_NUMBER
   FileName:<项目文件夹> /Properties/AssemblyInfo.cs
   RegexPattern:程序集(\ w *)版本\(“((\ d +)。(\ d +)。(\ d +)。(\ d +)”\)
   ReplacementPattern:汇编$ 1Version(“$ 2. $ 3.%s”)

这将保留Assembly ??? Version设置中已包含的前两个数字,并将第三个版本号设置为当前的Jenkins内部版本号。

实施例

AssemblyInfo.cs包含:

def get_meet_dets(self, cr, uid, ids, meet_ref, context=None):
        val = {}
        res = []

        if meet_ref:
            for det in self.pool.get('calendar.event').browse(cr,uid,meet_ref,context=context):
                for asst in det.attendee_ids:
                    emp_id = self.pool.get('hr.employee').search(cr, uid, [('user_id','in',user_id)])
                    val = {
                        'empname' : emp_id[0],
                        'wk_mail': asst.partner_id.email,
                        'loc' : det.location,
                        }
                    res.append(val)
            val.update({'matp':res})

如果Jenkins内部版本号为103,则在更改程序集版本插件使用上述设置后,AssemblyInfo.cs将包含:

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

注意

     

如果您正在使用subversion(可能还有其他源代码控制系统)并使用“尽可能使用SVN更新”的“签出策略”,则必须将其更改为“在更新前使用svn revert尽可能多地使用SVN更新”,以确保为下一次构建重置修改后的AssemblyInfo.cs文件。

答案 2 :(得分:4)

很酷,我自己找到了答案。

基本上,我不得不给#34; 1.0.0。$ BUILD_NUMBER"在"汇编版本" "改变装配版本"插件

答案 3 :(得分:1)

我最近不得不在没有“更改程序集版本”插件的情况下执行此操作。我只是使用了 PowerShell 脚本。我会把它贴在这里,因为它可能为那些想要它的人提供更多的灵活性:

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("$1.$2.$3.' + $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("$1.$2.$3.' + $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."
}