在 Azure Devops 上的 cURL 请求中使用环境变量

Using Environment Variables in a cURL request on Azure Devops

我正在尝试使用 Azure DevOps 上的 cURL 通过命令行任务将 zip 文件上传到 Netlify。

显然我不想在 yaml 文件中使用我的 Netlify 访问令牌,所以我为它创建了一个秘密变量(使用 UI 设计器)并使用docs

但是我一直从 Netlify 收到 401 回复。我可以通过 POSTMAN 确认访问令牌有效。所以我不确定我在这里做错了什么。我是否在请求中错误地使用了环境变量?

这是处理上传文件的 YAML 文件部分。

- script:  >-
      curl
      -H 'Authorization: Bearer $env:ACCESS_TOKEN' 
      -H 'Content-Type: application/zip'
      --data-binary '@$(Build.BuildId).zip'
      https://api.netlify.com/api/v1/sites/$env:SITE_ID/deploys
  workingDirectory: '$(Build.ArtifactStagingDirectory)'
  displayName: 'Upload to Netlify'
  env: 
    ACCESS_TOKEN: $netlifyAccessToken
    SITE_ID: $netlifySiteId

Netlify 的回复:

{"code":401,"message":"Access Denied: Origin returned bad status 401"}` 

编辑:

下面是我使用 docs

中的 'input-macro' 语法使其工作后的完整 YAML 文件
trigger:
- master

pool:
  vmImage: 'Ubuntu-16.04'

variables:
  configuration: debug
  platform: x64

steps:
- task: DotNetCoreInstaller@0
  displayName: Install .NET Core SDK
  name: install_dotnetcore_sdk
  enabled: true
  inputs:
    packageType: 'sdk'
    version: '2.2.101'

- script: dotnet tool install -g Wyam.Tool
  displayName: Install Wyam

- script: wyam
  displayName: Build Site 

- task: ArchiveFiles@2
  displayName: Zip Site
  inputs:
    rootFolderOrFile: '$(Agent.BuildDirectory)/s/output' 
    includeRootFolder: true
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 
    replaceExistingArchive: true

- script:  >-
      curl
      -H 'Authorization: Bearer $(netlifyAccessToken)' 
      -H 'Content-Type: application/zip'
      --data-binary '@$(Build.BuildId).zip'
      https://api.netlify.com/api/v1/sites/$(netlifySiteId)/deploys
  workingDirectory: '$(Build.ArtifactStagingDirectory)'
  displayName: 'Upload to Netlify'

你需要使用 bash 语法来检索环境变量,而不是 powershell(因为你使用的是 bash,而不是 powershell):

-H "Authorization: Bearer $ACCESS_TOKEN"

我还怀疑您需要更新环境声明:

env: 
  ACCESS_TOKEN: $(netlifyAccessToken) << ADO token to replace with variable from build scope
  SITE_ID: $(netlifySiteId)