簡體   English   中英

如何從構建到發布管道獲取 TFS/AzureDevOps 中的變量值?

[英]How to get the variable value in TFS/AzureDevOps from Build to Release Pipeline?

我在我的 TFS/AzureDevops 構建定義中定義了一個變量(比如time ),並在我的構建定義中使用 PowerShell 任務分配值。

喜歡,

類型:內聯腳本。

內聯腳本:

$date=$(Get-Date -Format g);
Write-Host "##vso[task.setvariable variable=time]$date"

你可以參考這個類似的例子

現在我想在我的發布定義管道中獲取這個值。 我將此構建定義配置為對我的發布定義的持續部署。

我的問題是

如何使用其他變量在發布定義中獲取time值? 這可能嗎?

這不是將變量從 Build 傳遞到 Release 的官方方式。 完成此操作的唯一方法是將值存儲在文件中(json、xml、yaml、你有什么)並將其作為構建工件附加。 這樣您就可以在發行版中讀取文件並再次設置變量。

Martin Hinshelwood 似乎對這個問題感到非常沮喪, 並將該功能變成了 Azure DevOps Pipelines 的擴展

包含的任務

  • 變量保存任務- 在構建期間,您可以將變量保存到與其他構建資產一起存儲的 json 文件中
  • 變量加載任務- 在發布期間,您可以加載保存的變量並訪問它們。

在變量組中使用變量怎么樣?

我設法將變量組中的變量值設置為來自構建管道的變量,然后在發布管道中讀取該變量。

為此,有必要:

  • 之前創建了變量組和變量(其名稱由$(variableName)標識。假設它的值將存儲在$(variableValue)中)。
  • 查找變量組 ID(存儲在$(variableGroupId)中),這可以通過在 Azure DevOps 上導航到該變量組來完成。 然后,組 ID 將出現在 URL 中。
  • 具有對組變量的讀寫訪問權限的個人訪問令牌 (PAT)(稱為$(personalAccessToken)

CI 管道

- powershell: |
    az pipelines variable-group variable update --group-id $(variableGroupId) --name $(variableName) --value $(variableValue)
  displayName: 'Store the variable in a group variable'
  env: 
    AZURE_DEVOPS_EXT_PAT: $(personalAccessToken)

然后,只需將變量組鏈接到發布管道,變量將被播種到該管道。

我發現了另一種解決方案,即使沒有文本文件也可以使用 Azure REST API 獲取構建參數。

在我的發布管道中,我首先執行此 Powershell 任務以提取任何構建管道參數:

function Get-ObjectMember {
  [CmdletBinding()]
  Param(
      [Parameter(Mandatory=$True, ValueFromPipeline=$True)]
      [PSCustomObject]$obj
  )
  $obj | Get-Member -MemberType NoteProperty | ForEach-Object {
      $key = $_.Name
      [PSCustomObject]@{Key = $key; Value = $obj."$key"}
  }
}

$url = "https://dev.azure.com/$(account)/$(project)/_apis/build/builds/$(Build.BuildId)?api-version=6.0"
$build = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
$params = $build.templateParameters
if ($params) {
  $params | Get-ObjectMember | foreach {
    Write-Host $_.Key : $_.Value
    echo "##vso[task.setvariable variable=$($_.Key);]$($_.Value)"
  }
}

我的構建管道包含參數: RELEASE_VERSION ,在執行上述代碼后,我可以在其他發布任務中使用$(RELEASE_VERSION)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM