Как указать git author / committerдля слияния PullRequest в Azure DevOps?

#azure-devops-rest-api

#azure-devops-rest-api

Вопрос:

Я определил конвейер выпуска для синхронизации кода между двумя репозиториями git в Azure DevOps. Процесс требует PullRequest в целевом репозитории, который создается и завершается с помощью WebAPI.

Конвейер выполняется агентом сборки, запущенным с использованием учетной записи службы домена Windows. Итак, PullRequest создается и завершается от имени учетной записи службы, которая также упоминается как автор, коммиттер и т.д. В истории git после завершения слияния. (Согласно нашим правилам, PR должен быть объединен с использованием фиксации squash.)

Я хотел бы видеть другого пользователя в истории git после слияния (squash).

Могу ли я указать пользователя (например, пользователя, запускающего конвейер выпуска) с помощью WebAPI? Я не нашел такой опции в документации API.

Есть другие рекомендации? Может быть, соглашение, подобное добавлению «co-authored-by» для фиксации сообщения, подобного github?

Комментарии:

1. Не получаю вашего ответа в течение нескольких дней, не могли бы вы поделиться своей последней информацией об этой проблеме? Если у вас есть какие-либо опасения, не стесняйтесь поделиться ими здесь.

Ответ №1:

Когда вы используете Pull Requests-Create rest api для создания запроса на извлечение, создатель запроса на извлечение определяется создателем PAT, который вы использовали для аутентификации (например, я использовал PAT пользователя hughl01 в качестве аутентификации для создания запроса на извлечение, тогда создателем запроса на извлечение является hughl01).

Тест в Postman:

введите описание изображения здесь

введите описание изображения здесь

Пример тестового сценария в задаче powershell:

 $token = "{User-created PAT}"

$url = "https://dev.azure.com/{org}/{pro}/_apis/git/repositories/{repoId}/pullrequests?api-version=6.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = @'
{
  "sourceRefName": "refs/heads/dev2",
  "targetRefName": "refs/heads/master",
  "title": "ForTest",
  "description": "Adding a new feature"
}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -ContentType application/json -body $JSON
  

Вы можете создать группу переменных с триггером выпуска в качестве имени переменной и значением переменной, соответствующим пользователю, и установить значение переменной в secret. Затем получите имя инициатора через предопределенную переменную $(Release.RequestedFor) в скрипте, затем получите соответствующий PAT в соответствии с именем триггера для создания запроса на извлечение.

Комментарии:

1. Для этого требуется иметь доступ к PAT пользователя, не так ли? Но я хочу создать PR для пользователя, который запустил конвейер выпуска (RELEASE_REQUESTEDFOR *).

2.создатель запроса на извлечение определяется создателем PAT, поэтому вы можете создать группу переменных с триггером выпуска в качестве имени переменной и PAT, соответствующим пользователю, в качестве значения переменной. Получите имя инициатора через предопределенную переменную $(Release.RequestedFor) в скрипте, затем получите соответствующий PAT в соответствии с именем триггера для создания запроса на извлечение.

3. Вы имеете в виду, я должен создать одну переменную группу для каждого (потенциально) создателя релиза? Или одна группа переменных с PAT для всех (потенциально) создателей? В обоих случаях мне нужно запросить и настроить PAT для всех (потенциально) создателей!?

4. Да, если вы хотите изменить автора, насколько я знаю, мы можем использовать только этот метод. Вы можете установить значение переменной в secret. Хотя это будет немного громоздко

5. Итак, я думаю, это должно быть частью вашего решения, а не только дополнительным примечанием (комментарием). Не могли бы вы переработать свое решение, чем я воспринимаю его как решение, даже если оно не является ожидаемым.