VSTS: как развернуть все свойства в определении возвращаемого выпуска
Наша архитектура VSTS использует конвейер с одним выпуском для обновления и запуска других конвейеров. Перед тем, как запущенные конвейеры запускают выпуск, конвейер "kicker" обновляет определение выпуска конвейера "kickee". У меня есть только имя конвейера "kickee", а не ID, поэтому, чтобы обновить конвейер, мы вызываем API, задокументированный по адресу:
https://docs.microsoft.com/en-us/rest/api/vsts/release/definitions/list?view=vsts-rest-5.0
Поскольку нам нужно изменить несколько аспектов определения релиза, мне нужно использовать параметр $expand, чтобы расширить ряд свойств, которые будут обновляться (переменные, артефакты, среды и т. Д.). Документация, кажется, указывает, что несколько свойств могут быть расширены, но неясно, как это сделать. Это какой-то список, передаваемый в параметр, и если да, то, что отделяет каждый список? Ожидается ли, что параметр указан несколько раз (что, по-моему, допустимо в соответствии с разделом Как передать несколько параметров в строке запроса)? Другие опции?
2 ответа
Вы разделяете свойства с ,
,
Например:
https://vsrm.dev.azure.com/{your-account}/{your-project}/_apis/release/definitions?$expand=Environments,Artifacts&api-version=5.0-preview.3
Вы получите в результате Environments
и Artifacts
:
"environments": [
{
"id": 1,
"name": "Environment 1",
"rank": 1,
"owner": {
"displayName": "Shayki Abramczyk",
"url": "https://app.vssps.visualstudio.com/xxxxxxx-7cea-4070-bdad-0e1f6e0bc9e7/_apis/Identities/7a9a9b44-a2f1-6dfd-a7f6-e49cafde66b0",
"_links": {
"avatar": {
"href": "https://dev.azure.com/shaykia/_apis/GraphProfile/MemberAvatars/msa.xxxYTliNDQtYTJmMS03ZGZkLWE3ZjYtZTQ5Y2FmZGU2NmIw"
}
},
"id": "xxxxx-a2f1-6dfd-a7f6-e49cafde66b0",
"uniqueName": "xxxxx@gmail.com",
"imageUrl": "https://dev.azure.com/shaykia/_api/_common/identityImage?id=xxxxx-a2f1-6dfd-a7f6-e49cafde66b0",
"descriptor": "msa.N2E5YTliNDQtYTJmMS03ZGZkLWE3ZjYtZTQ5Y2FmZGU2NmIw"
},
"variableGroups": [],
"schedules": [],
"currentRelease": {
"id": 7,
"url": "https://vsrm.dev.azure.com/shaykia/xxxxx-b891-4fe5-b2fe-9b9a19a1d1af/_apis/Release/releases/7",
"_links": {}
},
"retentionPolicy": {
"daysToKeep": 30,
"releasesToKeep": 3,
"retainBuild": true
},
"properties": {},
"preDeploymentGates": {
"id": 0,
"gatesOptions": null,
"gates": []
},
"postDeploymentGates": {
"id": 0,
"gatesOptions": null,
"gates": []
},
"environmentTriggers": [],
"badgeUrl": "https://vsrm.dev.azure.com/shaykia/_apis/public/Release/badge/xxxxx5-b891-4fe5-b2fe-9b9a19a1d1af/1/1"
}
],
"artifacts": [
{
"sourceId": "xxxxx-b891-4fe5-b2fe-9b9a19a1d1af:2",
"type": "Build",
"alias": "MyProject",
"definitionReference": {
"artifactSourceDefinitionUrl": {
"id": "https://dev.azure.com/shaykia/_permalink/_build/index?collectionId=xxxxxx-8c69-4ea0-8882-6340bf42f3b6&projectId=7fcdafd5-b891-4fe5-b2fe-9b9a19a1d1af&definitionId=2",
"name": ""
},
"defaultVersionBranch": {
"id": "",
"name": ""
},
"defaultVersionSpecific": {
"id": "",
"name": ""
},
"defaultVersionTags": {
"id": "",
"name": ""
},
"defaultVersionType": {
"id": "latestType",
"name": "Latest"
},
"definition": {
"id": "2",
"name": "MyBuild"
},
"project": {
"id": "xxxxxx-b891-4fe5-b2fe-9b9a19a1d1af",
"name": "SampleForVSTS"
}
},
"isPrimary": true,
"isRetained": false
}
],
"releaseNameFormat": "Release-$(rev:r)",
"retentionPolicy": {
"daysToKeep": 30
},
"properties": {},
"id": 1,
"name": "New Release Definition",
"path": "\\",
"projectReference": null,
"url": "https://vsrm.dev.azure.com/shaykia/xxxxxx-b891-4fe5-b2fe-9b9a19a1d1af/_apis/Release/definitions/1",
"_links": {
"self": {
"href": "https://vsrm.dev.azure.com/shaykia/xxxxxx-b891-4fe5-b2fe-9b9a19a1d1af/_apis/Release/definitions/1"
},
"web": {
"href": "https://dev.azure.com/shaykia/xxxxxx-b891-4fe5-b2fe-9b9a19a1d1af/_release?definitionId=1"
}
}
}
]
}
Я обошел проблему, используя API списков для получения идентификатора определения, а затем вызвал API get для получения полного содержимого определенного определения релиза. Это не идеально, если мне нужно обновить большое количество определений выпусков одновременно, но будет работать для моих нужд, так как мне нужно обновлять определения по одному за раз.