问题描述
我一定要老了-或其他....但是我无法将自己的头围在这里想要做的事情上。
我有一个相当简单的.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'
但是在任何情况下,我都找不到任何显示在哪里的“结果”供我下载或获取...。
解决方法
您是否浏览了已发布的文件夹?
当我第一次遇到蔚蓝的管道时,我花了一段时间才找到那个位置。
,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/publish
和maven publish
之类的任务将工件发布到相应的提要。但是,如果工件只是构建步骤之间的中间文件,那么我们需要手动处理这些输出,将所需的内容打包并发布到工件中。此过程可以简单地视为选择文件和发布工件。通常,我们将使用copy file
和PublishBuildArtifacts
这两个任务来完成它。复制文件会将文件复制到我们定义的文件夹中,默认值为$(build.artifactstagingdirectory)
,然后PublishBuildArtifacts
任务会将其发布到Azure Pipelines,以便我们可以在azure管道中使用它。建立结果。
您可以查看文档Artifacts in Azure Pipelines了解更多详细信息。