Azure DevOps REST API для создания определения выпуска
Согласно сообщению об ошибке:
"Workflow of deploy job 'Run on the agent' in release pipeline stage 'development' is invalid.
Мы могли бы знать задачу Deploy Azure App Service
в workflowTasks
неверно, нам нужно предоставить правильное тело запроса для этой задачи.
Как я уже ответил на ваш предыдущий пост Как создать новый конвейер сборки с использованием Azure DevOps REST API это очень сложно и подвержено ошибкам, если мы добавляем огромное тело запроса полностью вручную. Обычно мы используем REST API Definitions - Get , чтобы получить тело ответа из аналогичного конвейера выпуска, затем обновляем соответствующие свойства, изменяя тело ответа.
В качестве теста я добавляю Задача Разверните Azure Службу приложений в моем конвейере выпуска, затем я использую REST API:
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions/{definitionId}?api-version=5.0
, чтобы получить тело ответа:
"workflowTasks": [
{
"environment": {},
"taskId": "497d490f-eea7-4f2b-ab94-48d9c1acdcb1",
"version": "4.*",
"name": "Azure App Service Deploy: xxxx",
"refName": "",
"enabled": true,
"alwaysRun": false,
"continueOnError": false,
"timeoutInMinutes": 0,
"definitionType": "task",
"overrideInputs": {},
"condition": "succeeded()",
"inputs": {
"ConnectionType": "AzureRM",
"ConnectedServiceName": "xxxxx",
"PublishProfilePath": "$(System.DefaultWorkingDirectory)/**/*.pubxml",
"PublishProfilePassword": "",
"WebAppKind": "webApp",
"WebAppName": "xxxx",
"DeployToSlotOrASEFlag": "false",
"ResourceGroupName": "",
"SlotName": "production",
"DockerNamespace": "",
"DockerRepository": "",
"DockerImageTag": "",
"VirtualApplication": "",
"Package": "$(System.DefaultWorkingDirectory)/**/*.zip",
"RuntimeStack": "",
"RuntimeStackFunction": "",
"StartupCommand": "",
"ScriptType": "",
"InlineScript": ":: You can provide your deployment commands here. One command per line.",
"ScriptPath": "",
"WebConfigParameters": "",
"AppSettings": "",
"ConfigurationSettings": "",
"UseWebDeploy": "false",
"DeploymentType": "webDeploy",
"TakeAppOfflineFlag": "true",
"SetParametersFile": "",
"RemoveAdditionalFilesFlag": "false",
"ExcludeFilesFromAppDataFlag": "true",
"AdditionalArguments": "-retryAttempts:6 -retryInterval:10000",
"RenameFilesFlag": "true",
"XmlTransformation": "false",
"XmlVariableSubstitution": "false",
"JSONFiles": ""
}
}
]
Вы можете использовать это тело ответа, и перезаписать те свойства, которые вы хотите изменить.
Где я могу получить taskId на портале Azure?
Вы можете проверить исходный код задачи от Github generally обычно находится в первой строке task.json
. Или вы можете использовать REST API / F12 для его получения.
Можем ли мы использовать AzureContainerRegistry в качестве типа артефакта в теле запроса?
Ответ должен быть да ( не проверять это по образцу). Вы можете добавить следующее тело запроса в теле:
"artifacts": [
{
"sourceId": "xxxxxxxxxxxxxxx",
"type": "AzureContainerRepository",
"alias": "xxx",
"definitionReference": {
"connection": {
"id": "xxxxxx",
"name": "xxxx"
},
"defaultVersionType": {
"id": "latestType",
"name": "Latest"
},
"definition": {
"id": "xx",
"name": "xx"
},
"registryurl": {
"id": "22",
"name": "22"
},
"resourcegroup": {
"id": "xx",
"name": "xx"
}
},
"isPrimary": true,
"isRetained": false
}
],
Надеюсь, это поможет.