繁体   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