构建管道文件夹系统是如何工作的?



我想了解构建系统如何在Azure DevOps中工作:

首先显示我的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://learn.microsoft.com/azure/devops/pipelines/apps/windows/dot-net
name: $(Date:yy).$(Date:MM).$(Rev:r)
trigger: 
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
displayName: NyGetCommand Restore
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'

最后一个任务的错误:

##[warning]Directory 'D:a1a' is empty. Nothing will be added to build artifact 'drop'. 

在检查了我的日志后,我意识到构建(VSBuild@1)没有在与发布(VSBuild@1)相同的文件夹中播放。

Build正在发生在D:a1s

Publish is looking in D:a1a

为什么会这样?我在哪里可以控制它。什么是官方文件夹。我在哪里可以找到关于这些代理和文件夹的详细文件?

在下面的步骤中,您将指定要发布的文件夹。具体来说,您正在尝试发布$(Build.ArtifactStagingDirectory)

- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'

但是当您还没有准备工件时,那里将没有任何信息。

$(Build.ArtifactStagingDirectory)变量的描述如下:

代理上的本地路径,任何工件在被推送到目的地之前都会被复制到该路径。例如:c:agent_work1a

使用此文件夹的典型方法是通过复制文件和发布构建工件任务发布构建工件。

注意:构建。ArtifactStagingDirectory和Build。StagingDirectory是可互换的。此目录在每次新构建之前都会被清除,因此您不必自己清理它。

请参阅Azure管道中的工件。

该变量是代理范围的,可以用作脚本中的环境变量和构建任务中的参数,但不能作为构建号的一部分或版本控制标记。

有可能您错过了本例中的第一个任务:复制并发布二进制文件。

- task: CopyFiles@2
inputs:
sourceFolder: '$(Build.SourcesDirectory)'
contents: '**/$(BuildConfiguration)/**/?(*.exe|*.dll|*.pdb)'
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: drop

最新更新