#azure-devops #azure-powershell
Вопрос:
У меня есть сценарий powershell, который генерирует отчет CSV для некоторых проверок в подписке Azure. Этот сценарий хранится в Azure git и выполняется через конвейер выпуска Azure DevOps с использованием параметров для различных подписок и ресурсов. Выходной путь к файлу csv также параметризуется. Как я могу сохранить выходной отчет csv с соглашением об именовании меток даты и времени в репозитории Azure Git как часть выполнения конвейера/сценария?
Ответ №1:
Вы можете использовать API Push — Create REST из своего конвейера/задачи для добавления файла в репозиторий.
Пример запроса на добавление текстового файла:
POST https://dev.azure.com/fabrikam/_apis/git/repositories/{repositoryId}/pushes?api-version=6.0
Тело запроса
{
"refUpdates": [
{
"name": "refs/heads/master",
"oldObjectId": "8b67126d2500e28c771f82c9ddc292679978197c"
}
],
"commits": [
{
"comment": "Added task markdown file.",
"changes": [
{
"changeType": "add",
"item": {
"path": "/tasks.md"
},
"newContent": {
"content": "# Tasksnn* Item 1n* Item 2",
"contentType": "rawtext"
}
}
]
}
]
}
Проверьте ссылку на API REST для других примеров.
Ответ №2:
Как я могу сохранить выходной отчет csv с соглашением об именовании меток даты и времени в репозитории Azure Git как часть выполнения конвейера/сценария?
Вы можете добавить задачу PowerShell в конвейер выпуска для запуска Rest API: Добавьте двоичный файл
Чтобы сохранить csv-файл с меткой даты и времени, вы можете использовать скрипт Get-date для получения даты.
Вот полный пример PowerShell:
$file= [IO.File]::ReadAllBytes("filepatha.csv")
$Base64file= [Convert]::ToBase64String($file)
echo $Base64file
$timestamp = Get-Date -Format "yyyy-MM-dd"
$token = "PAT"
$url="https://dev.azure.com/{Organization}/_apis/git/repositories/{repoid}/pushes?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = "
{
`"refUpdates`": [
{
`"name`": `"refs/heads/main`",
`"oldObjectId`": `"Oldcommitid`"
}
],
`"commits`": [
{
`"comment`": `"Added new csv file.`",
`"changes`": [
{
`"changeType`": `"add`",
`"item`": {
`"path`": `"b-$timestamp.csv`"
},
`"newContent`": {
`"content`": `"$Base64file`",
`"contentType`": `"base64encoded`"
}
}
]
}
]
}"
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json
echo $response
Результат:
Комментарии:
1. Спасибо Бхаргави и Кевину за ответ. извините за задержку с ответом на эти решения. Что я пытаюсь сделать, так это — я использую объект PSCustom и добавляю значения требуемых проверок со всеми другими сведениями о ресурсах. Итак, как я могу добавить и сохранить этот CSV-файл в ADO, используя метод PSCustomObject.