【问题标题】:How to access variables relating to a TFS commit in build definition如何在构建定义中访问与 TFS 提交相关的变量
【发布时间】:2018-05-11 09:13:54
【问题描述】:

我正在使用“发布到 Slack”任务作为我在 TFS 2018 中的构建步骤之一,我想知道如何访问与该提交相关的变量。我想将它们包含在 Message 字段中(类似于“提交:$(CommitMessage) 链接到变更集 $(ChangesetLink)”,但这些变量不存在)。这里是我需要在 TFS 中引用变量的地方:

本文档:link 描述了如何访问构建变量,但没有提及与提交相关的任何内容。我想访问提交消息、关联的提交变更集以及与提交关联的变更集的链接。有谁知道如何做到这一点或知道我在哪里可以找到它的文档?谢谢

【问题讨论】:

  • TFS / VSTS REST API 允许做的不仅仅是基础。您是否对 REST API 进行过一些研究? docs.microsoft.com/en-us/rest/api/vsts/git/commits/…
  • @cruiser 看起来很棒,你知道如何在构建定义中访问这些变量吗?例如评论,会是 $(GitCommit.comment) 吗?
  • 我不知道是否有预定义的变量可以满足您的需求。但是这些 REST API 可能会让你到达那里。如果您在基于 Windows 的代理上运行,则可以编写 powershell 脚本(如果不是基于 sh)来调用 REST API,解析结果,然后使用 ##vso[task.setvariable variable=name;]value 设置值到变量列表。 Stackoverflow 的参考链接stackoverflow.com/questions/37881017/…
  • 内置了一个 Slack 服务挂钩。那不满足你的需求怎么办? docs.microsoft.com/en-us/vsts/service-hooks/services/…
  • 我不确定如何从构建定义中访问/调用 REST API,如果可能的话,我想从 UI 中进行操作以方便使用。我编辑了我的帖子以包含一张图片,该图片将阐明我需要在哪里访问这些变量名。

标签: tfs


【解决方案1】:

Cruiser 说得对,TFS 中没有Predefined variables,可以通过REST API 获取需要的信息,然后使用Logging Commands 设置对应的变量。

  1. 创建一个 PowerShell 脚本来设置变量(参考下面 示例,您也可以Use the OAuth token to access the REST API),然后将脚本提交并推送到 TFS。
  2. 在“Post to Slack”任务之前添加一个PowerShell任务 运行 PS 脚本的定义
  3. 使用变量$(commitID)$(CommitMessage)$(commitUrl) 在“Post to Slack”任务中

注意对于 Git 是提交,对于 TFVC 是 changeset

您可以使用以下脚本来设置变量:

Param(
   [string]$collectionurl = "http://server:8080/tfs/DefaultCollection", 
   [string]$repoid = "389e8215-1fb2-4fdc-bd04-ebc8a8a4410e",
   [string]$user = "username",
   [string]$token = "password"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$searchCriteria = "$" + "top=1"

$baseUrl = "$collectionurl/_apis/git/repositories/$repoid/commits?$searchCriteria"          
$response = (Invoke-RestMethod -Uri $baseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})

#Retrieve values 
$commitID = $response.value.commitID
$CommitMessage = $response.value.comment
$commitUrl = $response.value.remoteUrl

#Set variables
Write-Host "##vso[task.setvariable variable=commitID]$commitID"
Write-Host "##vso[task.setvariable variable=CommitMessage]$CommitMessage"
Write-Host "##vso[task.setvariable variable=commitUrl]$commitUrl"

更新:

您可以使用此 REST API 来获取存储库 ID:

GET http://server:8080/tfs/DefaultCollection/{ProjectName}/_apis/git/repositories

【讨论】:

  • 感谢您的详细回复,您知道我如何获取我的 repo id 吗?
  • @Ryan 您可以使用 REST API GET http://server:8080/tfs/DefaultCollection/{ProjectName}/_apis/git/repositories 获取存储库 ID。
  • @Ryan 您是否通过上述答案解决了问题?有更新吗?
猜你喜欢
  • 2020-06-14
  • 1970-01-01
  • 2018-04-27
  • 2017-09-28
  • 2019-09-22
  • 1970-01-01
  • 2016-03-06
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多