Azure devops 如何读取由另一个管道触发的管道内的PR标记?

Azure devops 如何读取由另一个管道触发的管道内的PR标记?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我在这里回答了我的第一个问题,但我的情况有点不同。我需要从另一个管道触发的管道读取PR标记 PR触发CI,检查合并是否一切正常。如果是,CI将触发CD,CD将依次读取PR标记 PR->CI->CD(在此处访问标签) 我有一个名为Get PR tag的PowerShell任务,其中包含以下脚本(由Lance提供): 但我一直收到“请求无效”: 我的代理作业设置为使用OAuth令牌: 更新 在发布管道中,变量名与构建中的变量名不同,我们需要更新脚本中的url信息,我们还可以在初始化作业日志中检查发布

我在这里回答了我的第一个问题,但我的情况有点不同。我需要从另一个管道触发的管道读取PR标记

PR触发CI,检查合并是否一切正常。如果是,CI将触发CD,CD将依次读取PR标记

PR->CI->CD(在此处访问标签)

我有一个名为
Get PR tag
的PowerShell任务,其中包含以下脚本(由Lance提供):

但我一直收到“请求无效”:

我的代理作业设置为使用OAuth令牌:


更新

在发布管道中,变量名与构建中的变量名不同,我们需要更新脚本中的url信息,我们还可以在初始化作业日志中检查发布管道变量

步骤:

a。配置分支策略并添加策略生成验证->添加生成管道A b。创建发布->选择构建A作为源类型->启用功能拉请求触发器->打开预部署条件并启用拉请求部署选项

c。打开发布->启用允许脚本访问OAuth令牌的功能(单击代理作业名称=>其他选项)添加任务powershell并在下面输入脚本

$url = "$($env:SYSTEM_TASKDEFINITIONSURI)$env:BUILD_PROJECTID/_apis/git/repositories/$($env:BUILD_REPOSITORY_NAME)/pullRequests/$($env:BUILD_PULLREQUEST_ID)/labels?api-version=5.1-preview.1"
$response = Invoke-RestMethod -Uri $url -Method Get -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "##vso[task.setvariable variable=PullRequestTag;isOutput=true]$($response.value.name)"
d。将引用名称配置为PS,并添加task cmd以输出标记

CMD脚本:

echo $(PS.PullRequestTag)
e。创建拉取请求并添加标记 结果:

更新2

pull请求触发CI构建管道(power shell),构建管道完成后,将触发另一个构建管道(power shell测试)

b。打开构建管道powershell测试,添加新变量PullRequestID,并授予
测试构建服务(xxx)
帐户编辑构建管道权限。(打开生成管道(power shell测试)-->…-->安全-->编辑生成管道集以允许)

c。启用允许脚本访问OAuth令牌的功能(单击代理作业名称=>其他选项)添加任务powershell(获取标记值)并在下面输入脚本。单击powershell任务->输出变量->输入PS->添加任务cmd,并使用代码
echo$(PS.PullRequestTag)
输出标记值

$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:BUILD_REPOSITORY_NAME)/pullRequests/$(PullRequestID)/labels?api-version=5.1-preview.1"
    $response = Invoke-RestMethod -Uri $url -Method Get -Headers @{
        Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
    }
    
    Write-Host "##vso[task.setvariable variable=PullRequestTag;isOutput=true]$($response.value.name)"
d。打开build pipeline power shell,启用允许脚本访问OAuth令牌的功能(单击代理作业名称=>其他选项)添加任务powershell,并在下面输入脚本以更新管道(power shell测试)变量PullRequestID值

$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/55?api-version=5.1"
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 named PullRequestID to its new value pull request ID
$pipeline.variables.PullRequestID.value= $($env:SYSTEM_PULLREQUEST_PULLREQUESTID)

####****************** 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 'PullRequestID ' is updated to" $updatedef.variables.PullRequestID.value
write-host "=========================================================="

我已经更新了答案,请检查一下。pull请求触发CI构建管道,构建管道完成后,将触发CD发行管道,对吗?如果没有,请与我分享详细的步骤好吗?我会检查并帮助你。常规管道是构建管道还是发布管道?嗨,我已经更新了答案,请检查。此外,如果错误消息权限被拒绝,您应该看到错误消息(xxx服务帐户)需要编辑发布/构建管道{pipeline definition ID}的发布/构建管道权限。我们需要授予服务帐户编辑权限(打开发布/构建管道-->…-->安全-->编辑发布/构建管道集以允许)。请检查它如果有任何成就,请随时让我知道。嗨,在你的脚本中,你静态添加了55个,那么这个变量是什么<代码>定义/55
$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:BUILD_REPOSITORY_NAME)/pullRequests/$(PullRequestID)/labels?api-version=5.1-preview.1"
    $response = Invoke-RestMethod -Uri $url -Method Get -Headers @{
        Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
    }
    
    Write-Host "##vso[task.setvariable variable=PullRequestTag;isOutput=true]$($response.value.name)"
$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/55?api-version=5.1"
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 named PullRequestID to its new value pull request ID
$pipeline.variables.PullRequestID.value= $($env:SYSTEM_PULLREQUEST_PULLREQUESTID)

####****************** 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 'PullRequestID ' is updated to" $updatedef.variables.PullRequestID.value
write-host "=========================================================="