Azure 管道内部版本号作为 NuGet 包版本号

时间:2021-05-25 10:40:03

标签: azure-pipelines

我有一个 Azure 构建管道,我想用它来制作 NuGet 包。

.csproj

VersionPrefix>1.2.0</VersionPrefix>

我希望 NuGet 的版本:

  • 在其上附加一个内部版本号,并且
  • 有一个连字符,如果分支不是 master 则附加分支名称(从而生成预发布包)。 因此包版本可以是:1.2.0.81.2.1-hotfix202105251.2.1、...

在桩线 yml 我有:

  ${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
    buildConfiguration: 'Release'
    tag: ''
    
  ${{ if ne(variables['Build.SourceBranchName'], 'master') }}:
    buildConfiguration: 'Debug'
    tag: ${{ format('-{0}', variables['Build.SourceBranchName']) }}

...

- task: DotNetCoreCLI@2
  displayName: 'dotnet pack Filename'
  inputs:
    command: 'pack'
    packagesToPack: 'Folder/Filename.csproj'
    includesymbols: true
    includesource: true
    nobuild: true
    buildProperties: 'VersionSuffix="$(Build.BuildId)$(tag)"'
    versionSuffix: '$(Build.BuildId)$(tag)'
    outputDir: '$(Build.ArtifactStagingDirectory)'
    arguments: '--version-suffix $(Build.BuildId)$(tag)'

但这不起作用,因为 versionb 后缀 表示连字符后面的后缀,因此我的所有软件包似乎都是预发布的。

这是否可行——使用内部版本号作为版本号的一部分,tag 作为预发布名称?

** 编辑:将所需的值分配给变量 **

我试图通过在 pack 命令中完整指定它的想法来制作所需的版本号。但是当然不行。

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
         $xml = [Xml] (Get-Content Folder\Filename.csproj)
         $versionPrefix = $xml.Project.PropertyGroup.VersionPrefix
         echo $versionPrefix
         $version = $($versionPrefix).$(Build.BuildId)$(tag)
         echo "ECHO"
         echo $version
         echo $(version)
========================== Starting Command Output ===========================
##[debug]Entering Invoke-VstsTool.
##[debug] Arguments: '-NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'C:\agent\_work\_temp\fa4b86cc-c5a4-41f8-b6b8-a90492732482.ps1'"'
##[debug] FileName: 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
##[debug] WorkingDirectory: 'C:\agent\_work\12\s'
##[command]"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'C:\agent\_work\_temp\fa4b86cc-c5a4-41f8-b6b8-a90492732482.ps1'"
At C:\agent\_work\_temp\fa4b86cc-c5a4-41f8-b6b8-a90492732482.ps1:5 char:35
+ $version = $($versionPrefix).10504-pipeline
+                                   ~~~~~~~~~
Unexpected token '-pipeline' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken
 
##[debug]Exit code: 1
##[debug]Leaving Invoke-VstsTool.
##[error]PowerShell exited with code '1'.

1 个答案:

答案 0 :(得分:0)

恐怕无法通过 version-prefix 进行设置,您需要提供完整的包版本

- task: DotNetCoreCLI@2
  displayName: "dotnet pack"
  inputs:
    command: custom
    custom: pack
    arguments: >
      Folder/Filename.csproj
      --no-build
      -p:PackageId=myId
      --output $(Build.ArtifactStagingDirectory)
      -p:PackageVersion=2.1.0$(tag)
      -p:Configuration=$(buildConfiguration)
    packagesToPack: '**/*.csproj'
    versioningScheme: 'off'
    outputDir: '$(Build.ArtifactStagingDirectory)'

但是在这种情况下,您需要首先从 csproj 中获取 VersionPrefix 的当前值。