如何允许脚本从Yaml构建访问OAuth令牌

时间:2018-10-16 14:36:29

标签: azure-devops azure-pipelines

我的构建脚本使用SYSTEM_ACCESSTOKEN环境变量。

在设计器版本定义中,我检查了允许脚本访问OAuth令牌,一切正常。

复制设计者生成的YAML定义后,我无法访问SYSTEM_ACCESSTOKEN环境变量。

如何允许我的YAML版本访问OAuth令牌?

这是我的azure-pipelines.yaml:

queue:
  name: Hosted VS2017

steps:
- checkout: self
  lfs: true
  persistCredentials: true

- powershell: ./build.ps1

2 个答案:

答案 0 :(得分:2)

我在Pipeline Variable docs中找到了解决方案:必须在YAML中声明该变量。

在管道级别上用于所有作业/任务:

variables:
  system_accesstoken: $(System.AccessToken)

jobs:
  job: ...

或者在脚本/任务级别,例如PowerShell:

- powershell: ./build.ps1
  env:
      system_accesstoken: $(System.AccessToken)

答案 1 :(得分:0)

这对我有用。

  - pwsh: |
      $pat = "Bearer $env:SYSTEM_ACCESSTOKEN"
      Write-Host "PAT is: $pat"

      $getItemsUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$(Build.Repository.ID)/items?recursionLevel=Full&includeContentMetadata=true&api-version=6.0"
      Write-Host "url: $getItemsUrl"
      $data = Invoke-RestMethod -Uri "$getItemsUrl" -Headers @{Authorization = $pat}
      Write-Host "Raw data returned from Get Items API call: $data"

      Foreach ($i in $data.value)
      {
        Write-Host "Detailed data  returned from Get Items API call: $i"
      }
    env:
     SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    displayName: Power!