Azure devops ADS 2019-如何在构建作业之间传递变量
使用Azure DevOps Server 2019.1,我开始处理多个作业,以便将工作拆分到多个代理上 流本身运行良好。我有这样的设置 开始作业-这基本上是测试一些变量并更新buildnumber (取决于开始作业)运行测试作业-运行“多重配置”的作业,它将任务类别的逗号分隔列表 (取决于运行测试作业)结束作业-链中新生成的触发器生成任务 虽然作业依赖于另一个作业,但这似乎只会影响它们的启动时间,它们无法访问以前运行的作业提供的信息 基本上,我需要的是在Begin作业中设置的变量(buildNumber)的值。 我需要在运行测试和结束作业中使用此版本号。 我怎样才能得到这个信息?我读过一些文章说这是不可能的,但还没有看到有效的解决方法。有人有合适的工作环境吗?您是否尝试过: 您是否尝试过: 更新2: 使用YAML应该是最简单的解决方案。如果您坚持经典的构建视图。您可以通过将值存储在文件(json、xml、yaml等)中来实现这一点,您可以直接使用或重新设置变量来读取作业中的文件 当您对下一个生成排队时,它不会影响源代码管理中的文件,默认值也不会更改Azure devops ADS 2019-如何在构建作业之间传递变量,azure-devops,azure-devops-server-2019,Azure Devops,Azure Devops Server 2019,使用Azure DevOps Server 2019.1,我开始处理多个作业,以便将工作拆分到多个代理上 流本身运行良好。我有这样的设置 开始作业-这基本上是测试一些变量并更新buildnumber (取决于开始作业)运行测试作业-运行“多重配置”的作业,它将任务类别的逗号分隔列表 (取决于运行测试作业)结束作业-链中新生成的触发器生成任务 虽然作业依赖于另一个作业,但这似乎只会影响它们的启动时间,它们无法访问以前运行的作业提供的信息 基本上,我需要的是在Begin作业中设置的变量(buildN
在同一阶段的作业之间传递变量时,需要使用输出变量 但是,根据,在不同的作业中使用输出在经典UI格式中不受支持 作为此场景中的解决方法,您可以通过共享变量(在同一管道中跨作业共享变量) 1.您可以在管道变量中设置
键
变量:
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.运行管道,我们可以发现键
变量的值已成功更新:
因此,您可以在第一个作业中运行ps脚本来更新key
变量的值,然后所有后续作业都可以轻松访问更新的变量
注意:
$pipeline.variables.key.value=“value”
(必要)和Write host“Varialbe key的值更新为“$updatedef.variables.key.value
(可选)李>
如果我想将名为MyTest
的变量设置为valueMyValue
,则行应该是$pipeline.variables.MyTest.value=“MyValue”
和Write host”,Varialbe MyTest的值将更新为“$updatedef.variables.MyTest.value
OAuth令牌
,我们应该允许脚本访问OAuth令牌
。单击代理作业名称并选中以下框:xxx(ProjectName)生成服务设置edit build pipeline
allow
在同一阶段的作业之间传递变量时,需要使用输出变量 但是,根据,在不同的作业中使用输出在经典UI格式中不受支持 作为此场景中的解决方法,您可以通过共享变量(在同一管道中跨作业共享变量) 1.您可以在管道变量中设置
键
变量:
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.运行管道,我们可以发现键
变量的值已成功更新:
因此,您可以在第一个作业中运行ps脚本来更新key
变量的值,然后所有后续作业都可以轻松访问更新的变量
注意:
$pipeline.variables.key.value=“value”
(必要)和Write host“Varialbe key的值更新为“$updatedef.variables.key.value
(可选)李>
如果我想将名为MyTest
的变量设置为valueMyValue
,则行应该是$pipeline.variables.MyTest.value=“MyValue”
和Write host”,Varialbe MyTest的值将更新为“$updatedef.variables.MyTest.value
OAuth令牌
,我们应该允许脚本访问OAuth令牌
。单击代理作业名称并选中以下框:xxx(ProjectName)生成服务设置edit build pipeline
allow
我没有,如果我切换到2019文档,它会说这设置了一个多作业输出变量,除非使用YAML,否则无法将变量从构建管道的一个作业传递到另一个作业。确定吗?我改为Azure DevPSServer 2019,并重新加载了该设置的页面,这些设置都可用。尝试切换到经典构建视图我没有,如果切换到2019文档,它会显示这设置了一个多作业输出变量,您无法将变量从一个作业传递到另一个作业