【问题标题】:How to read environment variables in azure devops pipeline using powershell?如何使用 powershell 读取 azure devops 管道中的环境变量?
【发布时间】:2020-06-22 06:13:36
【问题描述】:

我创建了一个 PowerShell 作业,并使用以下代码使用 Powershell 在 azure 管道中设置环境变量。

[Environment]::SetEnvironmentVariable("key", "value")

我可以在同一个作业中使用$env:key 打印值。

但是当我尝试在下一个作业中使用$env:key 显示该值时,没有打印任何内容。如何通过 azure 管道使用上述环境变量。有没有其他方法来设置和读取自定义环境变量。

【问题讨论】:

标签: powershell azure-devops azure-powershell


【解决方案1】:

您几乎必须使用library variable groups(或集合,不记得名称),或者您必须使用特定方式在作业之间共享变量:

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#use-output-variables-from-tasks

【讨论】:

  • 感谢您的快速回复。我们没有使用 .Yml 文件。我们可以使用 PowerShell 脚本来做到这一点吗?
  • @venkatesh 您可以将示例切换到页面上的经典选项卡,也可以切换到 powershell 选项卡Define variables
  • @ShamraiAleksander 所说的,你也可以从 powershell 调用 ADO rest api 并在那里更新变量
【解决方案2】:

根据this,经典 UI 格式不支持using outputs in a different job

作为这种情况下的解决方法,您可以通过Pipeline Variables(在同一管道中的作业之间共享变量)或Variable Groups(在使用相同变量组的管道之间共享变量,它也适用于作业)共享变量。

由于您只想在同一管道中的作业之间共享变量,pipeline variable 对您来说就足够了。

1.可以在管道变量中设置key变量:

2.在您的第一份工作中添加一个包含以下内容的 Powershell 内联任务:

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"

# Update an existing variable to its new value
$pipeline.variables.key.value = "value"

####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99

$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

write-host "==========================================================" 
Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value
write-host "=========================================================="

3.运行管道我们可以发现key变量的值更新成功:

因此您可以在第一个作业中运行 ps 脚本来更新 key 变量的值,然后所有后续作业都可以轻松访问更新后的变量。

注意:

  1. 对于脚本本身,您只需更改行$pipeline.variables.key.value = "value"(必要)和Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value(可选)。

如果我想将名为MyTest 的变量设置为值MyValue,则这两行应该是$pipeline.variables.MyTest.value = "MyValue"Write-host "The value of Varialbe MyTest is updated to" $updatedef.variables.MyTest.value

  1. 为了确保一个作业中的ps任务可以访问OAuth Token,我们应该Allow Scripts to Access OAuth Token。点击代理作业名称并选中复选框:

  1. 要使管道具有更新管道变量的权限(编辑构建管道),请转到管道安全性为用户xxx(ProjectName) build service 设置Edit build pipeline 允许

希望以上所有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2019-10-09
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2023-02-04
    相关资源
    最近更新 更多