#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. Итак, я думаю, это должно быть частью вашего решения, а не только дополнительным примечанием (комментарием). Не могли бы вы переработать свое решение, чем я воспринимаю его как решение, даже если оно не является ожидаемым.