【问题标题】:Azure Pipeline - Increment build number and display in web appAzure Pipeline - 增加内部版本号并在 Web 应用程序中显示
【发布时间】:2018-12-12 03:01:34
【问题描述】:

我有以下简单的构建管道在 Azure DevOps 中工作,并将版本部署到暂存槽。

我想要一个构建修订/版本字符串,它是自动递增的。然后我想在我的网络应用程序中显示它,这样我就可以知道哪个版本的软件正在生产中。

目前我显示 .csproj 文件中的版本字符串。像这样的东西在一个

<Version>1.1.4.7</Version>

然后使用以下代码显示在网页上:

Version: @typeof(Startup).Assembly.GetName().Version.ToString()

如果我可以更新现有的版本字符串,那就太好了,但我愿意更改为最容易集成到 CI 流程中的任何内容。

【问题讨论】:

    标签: asp.net-core build azure-devops


    【解决方案1】:

    .Net Core 世界中的版本控制已得到简化。

    编辑你的 csproj 并修改如下:

    <PropertyGroup>
      <Version Condition=" '$(BUILD_BUILDNUMBER)' == '' ">1.0.0.0</Version>
      <Version Condition=" '$(BUILD_BUILDNUMBER)' != '' ">$(BUILD_BUILDNUMBER)</Version>
    </PropertyGroup>
    

    如果您的文件没有版本节点,请添加以上内容。

    上述设置意味着本地调试将为您提供 1.0.0.0 版本,如果您在非 Azure DevOps 环境中构建,您最终也将获得 1.0.0.0 版本。 $(BUILD_BUILDNUMBER) 是 Team Build 设置的环境变量,将在构建时由 VSTS 或 TFS 更新。

    .Net 版本需要采用 [major].[minor].[build].[revision] 格式,每个段为 0 到 65000 之间的数字。您可以在 选项选项卡,请参阅here 有关格式的更多信息。有关配置构建的有用步骤,请参阅 here

    【讨论】:

    • 当我添加这些行时,我从构建管道中收到以下错误:错误 CS7034:指定的版本字符串不符合要求的格式 - 主要[.minor[.build[.revision]] ]
    • $(date:yyyyMMdd)$(rev:.r)的默认值
    • 这个博客帮助结束了循环。内部版本号需要采用 0.0.0.0 格式。 blog.siliconvalve.com/2018/02/07/… 一旦我更改了程序集版本,它就会更新并显示在网络上。谢谢
    【解决方案2】:

    我正在使用 ADO 管道变量和类似 的计数器函数

    补丁变量是$[counter(format('{0}.{1}',variables['Major'], variables['Minor']),0)]

    然后我将所有这些值作为 powershell 任务直接放入变量中。

      - task: InlinePowershell@1
        displayName: Create Version Number
        inputs:
          Script: |
            param($major, $minor, $patch)
            $bv = "$major.$minor.$patch"
            Write-Host "##vso[task.setvariable variable=buildVersion]$bv"
            Write-Host "Version of net App : $bv"
        ScriptArguments: '-major $(Major) -minor $(Minor) -patch $(Patch)'
    

    现在,当我进行 .net 发布时,我只需传递版本

      - task: DotNetCoreCLI@2
        displayName: Publish Application
        inputs:
          command: 'publish'
          publishWebProjects: false
          projects: '**/MyAPIProject.csproj'
          arguments: '-r $(buildPlatform) -o $(Build.BinariesDirectory) -c $(buildConfiguration) --self-contained true /p:Version=$(buildVersion)'
          zipAfterPublish: false
          modifyOutputPath: false
    

    这样做的真正好处是,补丁的种子为零,然后每个后续构建都会自动递增。

    【讨论】:

      【解决方案3】:

      您应该使用 Azure DevOps Pipelines Release(a.k.a. Azure Pipelines release)而不是 Azure DevOps Pipelines build(a.k.a. Azure Pipelines build)。默认情况下,Azure Pipelines 版本会自动增加您的版本。

      默认情况下,Azure Pipelines 构建没有自动版本编号。因为增加版本应该在发布阶段完成,因为构建应该只关注持续集成,而不是作为版本控制要发布的构建。

      这是 Azure Pipelines 版本的官方文档,用于自动增加您的版本: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/?view=vsts#numbering

      【讨论】:

      • 好的,但是如何在我的网络应用程序中访问该版本名称,以便在页面上显示它?
      • 最快的方法是使用您生成的发布版本的标记,或者您可以简单地检查您的应用程序的可执行文件或 DLL 版本。
      猜你喜欢
      • 2016-07-23
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2023-03-14
      • 2017-06-01
      • 1970-01-01
      相关资源
      最近更新 更多