【问题标题】:Trying to get build output artifacts from Azure CI/CD尝试从 Azure CI/CD 获取生成输出工件
【发布时间】:2020-08-25 19:24:08
【问题描述】:

我一定是变老了 - 或者别的什么......但我无法理解我在这里要做的事情。

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

但下一步似乎让我望而却步。我来自 CruiseControl 或 Atlassian Bamboo 等工具,我们曾经有一个单独的“测试”构建 - 一个可以手动触发,做同样的事情(构建代码,运行测试),然后打包将输出构建到某种“工件”中 - 一个 ZIP 文件、一个 MSI 安装程序 - 随便什么。

我试图在 Azure Devops 中完成同样的事情 - 但我似乎无法只见树木不见森林......

有“工件”部分 - 很自然,我认为向我的构建管道添加另一个步骤并根据需要获得我的结果会轻而易举。但无论我做什么,我尝试什么——“存档文件”、“发布的构建工件”或我偶然发现的任何其他东西,我似乎都无法将我的构建结果转换成一个表单,以便我可以从 Azure 下载它构建完成后进行 DevOps。

我到底需要做什么?我期待能够进入“Artifacts”并以某种方式选择我的构建并获得我的输出 - 作为 ZIP 或其他 - 但情况似乎并非如此。如果我理解正确的话,“Artifacts”要求提供提要——比如 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'

但在这两种情况下,我发现任何“结果”都显示在任何地方供我下载或获取....

【问题讨论】:

    标签: c# .net-core azure-devops azure-pipelines azure-artifacts


    【解决方案1】:

    你看过发布的文件夹了吗?

    当我第一次遇到 azure pipelines 时,我花了一段时间才找到这个位置。

    【讨论】:

    • 谢谢 - 是的,这确实很隐蔽!
    【解决方案2】:

    Azure Artifacts 是一个源,在您将它们发布到源之前,您不会找到您的常规工件。如果您想发布您的工件供以后使用,您应该使用以下两个任务之一:

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

    查看您的存档定义,我看到您在$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip 此处发布了您的工件,但您正在尝试发布'$(Pipeline.Workspace)'。请将您的targetPath 更改为'$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' ,您应该能够在@Stefan 提到的地方看到您的工件。

    关闭此targetPath 是:

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

    【讨论】:

      【解决方案3】:

      哪篇文章写得非常好,可以解释如何设置?

      根据文档Overview of artifacts in Azure Pipelines

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

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

      那么我们需要对不同类型的工件采取不同的处理方式。如果我们的工件是特定的包仓库,那么我们通常使用nuget pack/publishmaven publish 等任务将工件发布到相应的提要。但是如果工件只是构建步骤之间的中间文件,那么我们需要手动处理这些输出,将我们想要的内容打包并发布到工件中。这个过程可以简单地看成是选择文件和发布工件。通常我们会使用copy filePublishBuildArtifacts这两个任务来完成它。 Copy file 将文件复制到我们定义的文件夹中,默认为$(build.artifactstagingdirectory),然后PublishBuildArtifacts任务会将其发布到Azure Pipelines,这样我们就可以在azure pipeline中使用,直接从构建结果中下载。

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

      【讨论】:

        猜你喜欢
        • 2022-08-16
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多