尝试从Azure CI / CD获取构建输出工件

问题描述

我一定要老了-或其他....但是我无法将自己的头围在这里要做的事情上。

我有一个相当简单的.NET Core命令行实用程序,代码托管在Azure Devops Git存储库中,并且我已在Azure Devops中使用构建管道进行了持续集成。就像魅力一样-新的检查进来了,代码得以编译且单元测试得以运行-很棒。

但是下一步似乎让我望而却步。我来自CruiseControl或Atlassian Bamboo之类的工具,在那里我们曾经有一个单独的“测试”构建-可以手动触发,执行相同的操作(构建代码,运行测试),然后打包将输出构建为某种“工件”(ZIP文件,MSI安装程序)。

我试图在Azure Devops中完成相同的任务-但我似乎看不到树木茂盛的森林...。

这里有“工件”部分-很自然地,我认为轻而易举地在构建管道中增加另一步并根据需要获得结果。但是,无论我做什么,尝试什么-“存档文件”,“发布的构建工件”或遇到的任何其他问题,我似乎都无法将构建结果转换成表格,以便可以从Azure下载构建完成后,便进行开发。

我到底需要做什么??我期望能够进入“工件”并以某种方式选择我的构建并获取我的输出(以ZIP或其他形式),但事实并非如此。如果我理解正确,“工件”会请求提要-如NuGet或Maven提要-但这不是我想要的...。

哪里有一篇写得很好的博客文章或教程可以解释如何进行设置?

到目前为止,我的构建YAML如下所示:

# .NET Desktop

trigger:
- none

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildplatform: 'Any cpu'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    platform: '$(buildplatform)'
    configuration: '$(buildConfiguration)'

然后我尝试了“存档文件”步骤:

# Archive files - compress files into .7z,.tar.gz,or .zip
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.BinariesDirectory)' 
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 
    replaceExistingArchive: true 
    verbose: 1

以及“已发布的管道工件”:

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    artifact: 'BfhInfoPackage'
    publishLocation: 'pipeline'

但是在任何情况下,我都找不到任何显示在哪里的“结果”供我下载或获取...。

解决方法

您是否浏览了已发布的文件夹?

Pipeline Build Summary

当我第一次遇到蔚蓝的管道时,我花了一段时间才找到那个位置。

,

Azure Artifacts是一个提要,在您发布常规提要之前,您将找不到常规的提要。如果要发布工件以供以后使用,则应使用以下两个任务之一:

建议使用第一个任务,因为它同时支持多阶段和经典发布管道。

查看您的存档定义,我看到您在$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip此处发布了工件,但是您正在尝试发布'$(Pipeline.Workspace)'。请把您的targetPath更改为'$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' ,这样您就可以在@Stefan提到的地方看到工件了。

关闭此targetPath是:

要发布的文件或目录的路径。可以是绝对目录,也可以是相对于默认工作目录的目录。可以包含变量,但不支持通配符。

,

哪里有一篇写得很好的博客文章或教程可以解释如何进行设置?

根据文档Overview of artifacts in Azure Pipelines

您可以发布和使用许多不同类型的软件包, Azure Pipelines中的工件。您的持续集成/连续 部署(CI / CD)管道可以将特定的程序包类型发布到 它们各自的软件包存储库(NuGet,npm,Python等)。 或者,您可以使用构建工件和管道工件来帮助存储 在构建步骤之间构建输出和中间文件。那你可以 添加,构建,测试甚至部署这些工件。

因此,Azure Pipelines中的工件类型可以是特定的程序包存储库(NuGet,npm,Python等),也可以存储生成输出和中间文件。

然后,我们需要对不同类型的工件采用不同的处理方法。如果我们的工件是特定的软件包存储库,那么我们通常使用诸如nuget pack/publishmaven publish之类的任务将工件发布到相应的提要。但是,如果工件只是构建步骤之间的中间文件,那么我们需要手动处理这些输出,将所需的内容打包并发布到工件中。此过程可以简单地视为选择文件和发布工件。通常,我们将使用copy filePublishBuildArtifacts这两个任务来完成它。复制文件会将文件复制到我们定义的文件夹中,默认值为$(build.artifactstagingdirectory),然后PublishBuildArtifacts任务会将其发布到Azure Pipelines,以便我们可以在azure管道中使用它。建立结果。

您可以查看文档Artifacts in Azure Pipelines了解更多详细信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...