我正在尝试为VSTS创建一个新的发布任务,需要从库中下载secure file。但是,当我运行以下PowerShell脚本时,不会显示安全文件,但其中有两个。这可能没有足够的权利吗?应该改变什么。
另一个问题:当我能够列出我要下载特定安全文件的安全文件时。我还没有找到关于如何做到这一点的任何例子。有谁知道一个例子?
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/distributedtask/securefiles"
Write-Host "URL: $url"
$secureFiles = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "SecureFiles: $secureFiles"
答案 0 :(得分:4)
没有此类REST API可下载安全文件,但您可以使用下载安全文件任务作为助手。
由于安全文件仅在构建期间存在于临时位置,因此您应首先通过下载安全文件任务下载安全文件,然后将安全文件复制到另一个目录:
您可以添加Download secure file task(对于VSTS)并指定要下载的filename
。
注意:由于任务不适用于TFS,您可以为TFS帐户安装类似Download Secure File扩展名的任务。
例如将安全文件复制到$(Build.ArtifactStagingDirectory)
,您可以使用PowerShell脚本:
Copy-Item -Path $(Agent.WorkFolder)\_temp\filename -Destination $(Build.ArtifactStagingDirectory)
或使用“复制文件”任务将安全文件复制到$(Build.ArtifactStagingDirectory)
。
BTW:
答案 1 :(得分:1)
我能够使用REST API,任务的访问令牌和应用程序/八位字节流的Accept标头下载安全文件。我启用了“允许脚本访问OAuth令牌”。在这里,我的task.json使用名为“ SecureFile”的secureFile。
$secFileId = Get-VstsInput -Name SecureFile -Require
$secTicket = Get-VstsSecureFileTicket -Id $secFileId
$secName = Get-VstsSecureFileName -Id $secFileId
$tempDirectory = Get-VstsTaskVariable -Name "Agent.TempDirectory" -Require
$collectionUrl = Get-VstsTaskVariable -Name "System.TeamFoundationCollectionUri" -Require
$project = Get-VstsTaskVariable -Name "System.TeamProject" -Require
$filePath = Join-Path $tempDirectory $secName
$token= Get-VstsTaskVariable -Name "System.AccessToken" -Require
$user = Get-VstsTaskVariable -Name "Release.RequestedForId" -Require
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $User, $token)))
$headers = @{
Authorization=("Basic {0}" -f $base64AuthInfo)
Accept="application/octet-stream"
}
Invoke-RestMethod -Uri "$($collectionUrl)$project/_apis/distributedtask/securefiles/$($secFileId)?ticket=$($secTicket)&download=true&api-version=5.0-preview.1" -Headers $headers -OutFile $filePath
我正在使用“ $(Build.QueuedById)”来获取构建任务中的用户ID,但老实说,我认为在这里使用什么字符串都没关系。
如果没有Accept标头,则将为尝试下载的文件返回JSON元数据。
不幸的是,我在其他SO帖子和github问题页面上将其拼凑在一起;我在任何地方都找不到可以记录我正在使用的URL的官员。