有没有办法自动将安全文件上传到azure devops库?

问题描述 投票:0回答:2

我正在尝试将密钥作为安全文件上传到 azure devops 以在管道上下文中使用,我只找到了手动上传,但它不是选项,有没有办法可以通过 powershell 或任何管道任务实现自动化?请建议。

azure-devops azure-pipelines azure-devops-rest-api
2个回答
7
投票

您可以使用 REST API 来执行此操作:

POST https://dev.azure.com/{organization}/{project}/_apis/distributedtask/securefiles?api-version=5.0-preview.1&name={fileName}

Content-Type=application/octet-stream

请在 GitHUb 上查看此主题

你会发现那里甚至还有powershell脚本:

param
(
    [Parameter(Mandatory=$true)] [string] $PAT,
    [Parameter(Mandatory=$True)][ValidateNotNullOrEmpty()]$AzureDevOpsOrg,
    [Parameter(Mandatory=$True)][ValidateNotNullOrEmpty()]$AzureDevOpsProjectID,
    [Parameter(Mandatory=$true)] [string] $SecureNameFile2Upload,
    [Parameter(Mandatory=$true)] [string] $SecureNameFilePath2Upload
)

try{
    $base64AuthInfo=[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$PAT)))
    $uploadSecureFileURI="https://dev.azure.com/$AzureDevOpsOrg/$AzureDevOpsProjectID/_apis/distributedtask/securefiles?api-version=5.0-preview.1&name=$SecureNameFile2Upload"
    $headers = @{
        Authorization=("Basic {0}" -f $base64AuthInfo)
    }
    Invoke-RestMethod -Uri $uploadSecureFileURI -Method Post -ContentType "application/octet-stream" -Headers $headers -InFile "$SecureNameFilePath2Upload"
}
catch
{
    write-host -f Red "Error upload client certificate file [$SecureNameFilePath2Upload] to AzureDevOps secure file!" $_.Exception.Message
    throw "Error occors -> $_.Exception.Message"
}

0
投票

来自 GitHub 问题

我复制在这里以供将来参考。

注意:构建服务必须具有安全文件创建者的角色 能够从管道上传它们。 块引用

### The variables secureFileFolder & secureFileName references variables I have defined higher up in the pipeline.
- task: PowerShell@2
  enabled: true
  displayName: "Upload Secure File"
  inputs:
      targetType: "inline"
      script: |
          $header = @{ Authorization = "Bearer $env:ACCESSTOKEN" }
          $infile = "$(secureFileFolder)/$(secureFileName)"
          $organization = (Split-Path $(System.CollectionUri) -leaf)
          $uri = "https://dev.azure.com/$organization/$(System.TeamProject)/_apis/distributedtask/securefiles?api-version=5.0-preview.1&name=$(secureFileName)"

          Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/octet-stream" -Headers $header -InFile "$infile"
  env:
      ACCESSTOKEN: $(System.AccessToken)

© www.soinside.com 2019 - 2024. All rights reserved.