Azure DevOps:如何从发布管道中的PowerShell脚本中从构建Azure管道检索构建工件?

Azure DevOps:如何从发布管道中的PowerShell脚本中从构建Azure管道检索构建工件?,azure,powershell,azure-pipelines,release,artifact,Azure,Powershell,Azure Pipelines,Release,Artifact,我发布了一个构建工件,该工件发布到$(build.ArtifactStagingDirectory)/drop,工件名为“some_sidebar”,工件发布位置为Azure Pipeline 如果发布任务中只有一个PowerShell SKcript,我现在如何在发布管道中检索该工件 以下是代码特定部分: $path = ".\_some_sidebar\drop" #$path = $(Build.Repository.LocalPath) $SPFolderName = "Style Li

我发布了一个构建工件,该工件发布到$(build.ArtifactStagingDirectory)/drop,工件名为“some_sidebar”,工件发布位置为Azure Pipeline

如果发布任务中只有一个PowerShell SKcript,我现在如何在发布管道中检索该工件

以下是代码特定部分:

$path = ".\_some_sidebar\drop"
#$path = $(Build.Repository.LocalPath)
$SPFolderName = "Style Library/_some_sidebar";

# Upload template list
$status = "Uploading template list to Location: " + $SPFolderName
Write-Host $status
$te = Add-PnPFile -Path $path"\some_sidebar.js" -Folder $SPFolderName -Checkout
Set-PnPFileCheckedIn -Url $te.ServerRelativeUrl
我得到以下错误:

 Uploading template list to Location: Style Library/_some_sidebar
2020-01-16T09:51:20.5062033Z Add-PnPFile : Local file was not found.
2020-01-16T09:51:20.5062546Z At D:\_work\_temp\6d682160-e8a7-4c56-ab30-7ff8c40f2958.ps1:51 char:7
2020-01-16T09:51:20.5062832Z + $te = Add-PnPFile -Path $path"\some_sidebar.js" -Folder $SPFolderName  ...

我假设azure管道中的构建工件路径是虚拟机中的某个路径。。。但是我不知道如何在shell脚本中指定该路径,或者该路径是什么…?

您应该能够使用System.ArtifactsDirectory

下面是我的管道和我如何使用上一步中的工件的示例。应该可以在powershell脚本中使用相同的变量。 (此示例来自用于构建和发布的yaml管道。)

下载工件后搜索zip时,请注意
。/a/***/
。不确定/a/是否相同,所有生成代理也可以在此处使用system.artifactsDirectory

Azure DevOps:如何从发布管道中的PowerShell脚本中从构建Azure管道检索构建工件

在你的帖子中有三个问题导致了这个问题

首先,因为您选择的工件发布位置是
Azure管道
,所以无法设置
targetPath
。您可以检查文档:

我假设您所说的应该设置
pathtoPublish
$(Build.artifactstagindirectory)/dro
p,带有artifactName“
一些侧边栏,如:

但是
路径发布
用于将文件夹或文件路径设置为发布,换句话说,它是工件源位置,而不是目标

因此,我们不需要在powershell脚本中使用
\drop
来获取工件

第二,MS提供了一系列功能,以便我们可以直接使用它们

您可以使用
System.DefaultWorkingDirectory
System.ArtifactsDirectory
Agent.ReleaseDirectory

因此,我们可以在powershell脚本中使用上述三个变量中的一个来获取工件,但该变量不是文件的完整路径,而是发布管道中工件的路径,我们还需要执行一个步骤

第三个,当您使用发布管道获取工件时,将工件设置为包含
源别名的文件夹

作为测试,我使用以下powershell脚本创建了一个示例:

$path = "$(System.DefaultWorkingDirectory)\<SourceAliasVlaue>\<AartifactName>"
#$path = $(Build.Repository.LocalPath)
$SPFolderName = "Style Library/_some_sidebar";

# Upload template list
$status = "Uploading template list to Location: " + $SPFolderName
Write-Host $status

Get-ChildItem -Path $path
希望这能有所帮助。

hmm我尝试使用
$(System.DefaultWorkingDirectory)/$Env:RELEASE\u PRIMARYARTIFACTSOURCEALIAS/**/packagename.sppkg
,但它不知何故无法识别powershell内联脚本中的**模式,也找不到文件--
$path = "$(System.DefaultWorkingDirectory)\<SourceAliasVlaue>\<AartifactName>"
#$path = $(Build.Repository.LocalPath)
$SPFolderName = "Style Library/_some_sidebar";

# Upload template list
$status = "Uploading template list to Location: " + $SPFolderName
Write-Host $status

Get-ChildItem -Path $path
$te = Add-PnPFile -Path "$(System.DefaultWorkingDirectory)\**\some_sidebar.js"