【问题标题】:I have a build pipeline in Azure DevOps for my github repo - where are the binaries?我在 Azure DevOps 中有一个用于我的 github 存储库的构建管道 - 二进制文件在哪里?
【发布时间】:2019-08-31 19:07:05
【问题描述】:

这是管道的(未经模板编辑的)YAML 定义:

# .NET Desktop
# Build and run tests for .NET Desktop or Windows classic desktop solutions.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net

trigger:
- master

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)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

当代码按预期推送到我的仓库的主分支时,此管道会触发 - 但是我找不到它构建的二进制文件!我如何访问它们以便与人们分享它们?二进制文件不可用是因为我的一些单元测试失败,导致构建失败,还是什么?

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-tasks


    【解决方案1】:

    您需要在某处发布这些内容。您可以选择在管道的哪个阶段保留什么。您可以将文件复制到目录中,或者只获取整个$(Build.SourcesDirectory)。您还可以通过传入 /p:OutputPath=$(Build.ArtifactStagingDirectory) 命令行参数来指示 VsBuild 任务将输出重定向到特定目录。

    然后你有几个选择:

    • GitHub Release task - 在 GitHub 中创建一个版本并将您想要的文件关联到它。

      # GitHub Release
      # Create, edit, or delete a GitHub release
      - task: GitHubRelease@0
        inputs:
          gitHubConnection: 
          #repositoryName: '$(Build.Repository.Name)' 
          #action: 'create' # Options: create, edit, delete
          #target: '$(Build.SourceVersion)' # Required when action == Create || Action == Edit
          #tagSource: 'auto' # Required when action == Create# Options: auto, manual
          #tagPattern: # Optional
          #tag: # Required when action == Edit || Action == Delete || TagSource == Manual
          #title: # Optional
          #releaseNotesSource: 'file' # Optional. Options: file, input
          #releaseNotesFile: # Optional
          #releaseNotes: # Optional
          #assets: '$(Build.ArtifactStagingDirectory)/*' # Optional
          #assetUploadMode: 'delete' # Optional. Options: delete, replace
          #isDraft: false # Optional
          #isPreRelease: false # Optional
          #addChangeLog: true # Optional
          #compareWith: 'lastFullRelease' # Required when addChangeLog == True. Options: lastFullRelease, lastRelease, lastReleaseByTag
          #releaseTag: # Required when compareWith == LastReleaseByTag
      

    • Publish Pipeline Artifact (Azure DevOps) - 将选定文件作为工件链接到构建。你可以从 Azure DevOps 中管道的摘要页面下载它们。在构建和发布管道中运行良好。

      # Publish pipeline artifact
      # Publish (upload) a file or directory as a named artifact for the current run
      - task: PublishPipelineArtifact@1
        inputs:
          targetPath: '$(Pipeline.Workspace)' 
          artifact: 'Output'
      
    • Publish Build Artifact(Azure DevOps 和 TFS)- 类似于 Publish Pipeline Artifact,但其传输效率较低且特定于构建管道。也可以发布到文件共享而不是管道摘要的附件。

      # Publish build artifacts
      # Publish build artifacts to Azure Pipelines or a Windows file share
      - task: PublishBuildArtifacts@1        
        inputs:
          #pathtoPublish: '$(Build.ArtifactStagingDirectory)'         
          #artifactName: 'drop' 
          #publishLocation: 'Container' # Options: container, filePath
          #targetPath: # Required when publishLocation == FilePath
          #parallel: false # Optional
          #parallelCount: # Optional
      

    【讨论】:

    • 谢谢!我不得不更改发布管道工件的 targetPath 以将其限制为仅包含我想要的二进制文件;默认情况下,它包括整个解决方案文件夹。所以现在我生成了一个构建 - 有什么简单的方法可以链接最新的构建,这样人们就可以下载它,而无需在 Azure DevOps 中点击一堆?
    • 您可以在包管理中将其发布为通用包,这样您就可以将人们重定向到显示所有成功生成的包的单个页面。或者将它们作为版本发布到 GitHub。
    • 我不想每次推送更改时都用一堆版本把 github 弄得一团糟——什么是通用包,如何创建它?
    • 这看起来真的很混乱,我想我会选择 github 选项...
    【解决方案2】:

    您缺少“复制和发布工件”任务。此任务会将生成的编译后的二进制文件复制为稍后下载的工件。

    有关此复制和发布神器的更多信息,请访问官方文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-and-publish-build-artifacts?view=azure-devops

    更新:复制和发布工件任务在 Azure DevOps 中已弃用,请使用最新的:https://docs.microsoft.com/en-us/azure/devops/pipelines/artifacts/build-artifacts?view=azure-devops&tabs=yaml

    在你的 YAML 中使用这个:PublishBuildArtifacts@1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2022-10-14
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多