Как получить доступ к переменным, связанным с фиксацией TFS в определении сборки - PullRequest
0 голосов
/ 09 мая 2018

Я использую задачу «Post to Slack» в качестве одного из этапов сборки в TFS 2018, и мне интересно, как получить доступ к переменным, связанным с этим коммитом. Я хотел бы включить их как часть поля сообщения (что-то вроде «Commit: $ (CommitMessage) ссылка на changeset $ (ChangesetLink)», но эти переменные не существуют). Вот где мне нужно ссылаться на переменные в TFS:

enter image description here

Этот документ: ссылка описывает, как получить доступ к переменным сборки, но ничего не говорит о коммите. Я хотел бы получить доступ к сообщению о фиксации, связанным с ним изменениям и к ссылке на изменения (ий), связанные с фиксацией. Кто-нибудь знает, как это сделать или знает, где я могу найти документацию для этого? Спасибо

1 Ответ

0 голосов
/ 10 мая 2018

Крейсер прав, таких нет Предопределенные переменные в TFS, вы можете получить необходимую информацию с помощью REST API , а затем установить соответствующие переменные с помощью Команды ведения журнала .

  1. Создание сценария PowerShell для установки переменных (см. Ниже). Например, вы также можете использовать токен OAuth для доступа к REST API ), затем зафиксировать и отправить скрипт в TFS.
  2. Добавьте задачу PowerShell до задачи "Post to Slack" в вашем определение для запуска сценария 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"

UPDATE:

Вы можете использовать этот REST API для получения идентификатора хранилища:

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

enter image description here

...