在 Azure Pipelines 构建中命名生成的 ZIP 存档?

mar*_*c_s 5 .net-core azure-pipelines

仍在尝试全面掌握 Azure Pipelines 以及我可以用它们做什么......

我终于设法使用 Azure Pipelines 构建了我的小型 .NET Core 命令行实用程序 - 现在尝试将其发布为构建工件。

使用这个 YAML,我可以构建和打包工具:

- task: DotNetCoreCLI@2
  displayName: 'dotnet build'
  inputs:
    command: 'build'
    projects: '$(solution)'

- task: DotNetCoreCLI@2
  displayName: 'dotnet publish'
  inputs:
    command: publish
    publishWebProjects: False
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'MyTool_LatestBuild'
Run Code Online (Sandbox Code Playgroud)

但是在已发布的构建工件中,我只得到一个文件a.zip- 有什么方法可以影响该 ZIP 存档的名称吗?我真的很想有这样的事MyTool_2020_Sep_08.zipMyTool_v1.5.7.zip东西....但我怎么能做到这一点?似乎无法在互联网上的任何地方找到任何非常有用的东西......任何输入?

谢谢!

som*_*men 5

编辑:看看 vernou 的答案 - 我错了,我将把它留在这里,因为有些人可能更喜欢有不同的步骤,而我们都喜欢从 SO 复制。

您正在使用的任务不包含该功能,但您可以(像我一样)选择自己压缩它:

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: |
      **/*Client.csproj
      **/*WorkerService.csproj
      **/*Server.csproj
    arguments: '-c $(BuildConfiguration) -o $(Build.StagingDirectory)/ci-build --no-build --self-contained -r $(runtime)'
    zipAfterPublish: false

# Archive the /staging/ci-build folder to /staging/RemoteData.<BuildNumber>
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.StagingDirectory)/ci-build'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/RemoteData.$(Build.BuildNumber).zip'
    replaceExistingArchive: true

# Publish the zipfile as artifact
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/RemoteData.$(Build.BuildNumber).zip'
    ArtifactName: 'RemoteData.$(Build.BuildNumber)'
    publishLocation: 'Container'
Run Code Online (Sandbox Code Playgroud)

这样做的另一个好处是能够更密切地管理您的工作:

在此输入图像描述

正如您所看到的,每个步骤都在这里单独列出。


Lan*_*SFT 5

1. 同意Vernou。您可以通过指定包含二进制文件的文件夹名称来自定义名称。所以我们需要修改step的--output参数和dotnet publishstep的PathtoPublish参数PublishBuildArtifacts

2.但是要获取日期时间,您可以使用预定义变量Build.BuildNumber

我的工作样本:

name: $(Date:yyyyMMdd)$(Rev:.r)

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'dotnet publish'
  inputs:
    command: publish
    publishWebProjects: False
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/MyTool_$(Build.BuildNumber)'
    zipAfterPublish: True

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/MyTool_$(Build.BuildNumber)'
    ArtifactName: 'MyTool_LatestBuild'
    publishLocation: 'Container'
Run Code Online (Sandbox Code Playgroud)

有关使用 BuildNumber 获取日期的更多详细信息,您可以查看Configure run or build numbers

结果:

在此处输入图片说明

我们可以通过修改我们定义的方式来控制格式Build.BuildNumber(在 Yaml 中,它是name)。如果我们定义name: $(Date:yyyyMMdd),则输出 zip 将为MyTool_20200908.zip.

  • 我必须将“modifyOutputPath: false”添加到输入列表中,以阻止管道将项目名称(来自 .csproj)添加到“--output”指定的路径末尾。 (5认同)