Azure DevOps Pipeline - Release API - Update Release Definition: добавление и удаление шаблонной стадии

У нас есть определение выпуска конвейера Azure DevOps, и я собираюсь внедрить некоторую автоматизацию для новой стадии, которая будет создана из шаблона, когда запрос на вытягивание запускается в ветке x, и стадии, которая будет удалена, когда ветка удален. Я буду использовать для этого действия github.

Документам API не так-то просто следовать.

Мой вопрос:

  • возможно ли это, дозируйте поддержку API, добавляя и удаляя этапы в _releaseDefinition?

  • если да, то есть ли примеры, как это сделать?

Документ https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/update%20release?view=azure-devops-rest-5.1#releasedefinitionshallowreference


comment
Получили ли вы сейчас успешную работу? Могу я, как статус этого? Это вам поможет? Если да, вы можете принять ответ, таким образом, другие пользователи SO будут возможность увидеть, работает ли решение :-)   -  person Merlin Liang - MSFT    schedule 25.02.2020


Ответы (1)


Вам следует использовать следующий API: Обновление определения api:

PUT https://vsrm.dev.azure.com/{org name}/{project name}/_apis/release/definitions?api-version=5.1

Что касается тела запроса на этапе добавления / удаления этапа, на самом деле были внесены изменения только в параметр environments:

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

Одно определение стадии соответствует одному блоку кода серого.

Adding stage: Добавьте шаблон JSON-кода блок определения этапа (the grey one display in my left screenshots). Эта структура кода фиксированная.

Removing stage: Удалить полное определение соответствующего этапа.


Вот один полный пример определения этапа:

 {
            "id": -1,
            "name": "Stage 3",
            "rank": 3,
            "variables": {},
            "variableGroups": [],
            "preDeployApprovals": {
                "approvals": [
                    {
                        "rank": 1,
                        "isAutomated": true,
                        "isNotificationOn": false,
                        "id": 7
                    }
                ],
                "approvalOptions": {
                    "requiredApproverCount": null,
                    "releaseCreatorCanBeApprover": false,
                    "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false,
                    "enforceIdentityRevalidation": false,
                    "timeoutInMinutes": 0,
                    "executionOrder": "beforeGates"
                }
            },
            "deployStep": {
                "id": 8
            },
            "postDeployApprovals": {
                "approvals": [
                    {
                        "rank": 1,
                        "isAutomated": true,
                        "isNotificationOn": false,
                        "id": 9
                    }
                ],
                "approvalOptions": {
                    "requiredApproverCount": null,
                    "releaseCreatorCanBeApprover": false,
                    "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false,
                    "enforceIdentityRevalidation": false,
                    "timeoutInMinutes": 0,
                    "executionOrder": "afterSuccessfulGates"
                }
            },
            "deployPhases": [
                {
                    "deploymentInput": {
                        "parallelExecution": {
                            "parallelExecutionType": "none"
                        },
                        "agentSpecification": {
                            "identifier": "vs2017-win2016"
                        },
                        "skipArtifactsDownload": false,
                        "artifactsDownloadInput": {
                            "downloadInputs": []
                        },
                        "queueId": 247,
                        "demands": [],
                        "enableAccessToken": false,
                        "timeoutInMinutes": 0,
                        "jobCancelTimeoutInMinutes": 1,
                        "condition": "succeeded()",
                        "overrideInputs": {}
                    },
                    "rank": 1,
                    "phaseType": "agentBasedDeployment",
                    "name": "Agent job",
                    "refName": null,
                    "workflowTasks": []
                }
            ],
            "environmentOptions": {
                "emailNotificationType": "OnlyOnFailure",
                "emailRecipients": "release.environment.owner;release.creator",
                "skipArtifactsDownload": false,
                "timeoutInMinutes": 0,
                "enableAccessToken": false,
                "publishDeploymentStatus": true,
                "badgeEnabled": false,
                "autoLinkWorkItems": false,
                "pullRequestDeploymentEnabled": false
            },
            "demands": [],
            "conditions": [],
            "executionPolicy": {
                "concurrencyCount": 1,
                "queueDepthCount": 0
            },
            "schedules": [],
            "owner": {
        "displayName": "{user name}",
        "id": "{user id}",
        "isContainer": false,
        "uniqueName": "{creator account}",
        "url": "https://dev.azure.com/{org name}/"
      },
            "retentionPolicy": {
                "daysToKeep": 30,
                "releasesToKeep": 3,
                "retainBuild": true
            },
            "processParameters": {},
            "properties": {
                "BoardsEnvironmentType": {
                    "$type": "System.String",
                    "$value": "unmapped"
                },
                "LinkBoardsWorkItems": {
                    "$type": "System.String",
                    "$value": "False"
                }
            },
            "preDeploymentGates": {
                "id": 0,
                "gatesOptions": null,
                "gates": []
            },
            "postDeploymentGates": {
                "id": 0,
                "gatesOptions": null,
                "gates": []
            },
            "environmentTriggers": [],
            "badgeUrl": "https://vsrm.dev.azure.com/{org}/_apis/{project name}/Release/badge/3c3xxx6414512/2/3"
        },

Вот некоторые ключевые параметры, на которые следует обратить внимание: id, owner, rank и conditions.

id: это идентификатор этапа, который вы указали для этапа, его значение должно быть меньше 1. Здесь приемлемо любое значение меньше 1.

owner: обязательно. Или вы получите сообщение о том, что у сцены должен быть владелец.

rank: Натуральные числа больше 1. Здесь я предлагаю вам увеличить его на основе других этапов.

conditions: Это тот, от которого вы можете настроить, от какого этапа будет зависеть текущий новый. Вкратце, он используется для указания места выполнения стадии релиза.

При обновлении выпуска необходимо упаковать и установить все определение выпуска в качестве тела запроса. Получите исходный, добавьте в него новую настраиваемую часть определения сцены. Затем обновитесь до api.


Фактически, я предлагаю вам добавить этап с пользовательским интерфейсом для тестирования. Затем перейдите на вкладку История на странице определения выпуска. Затем выберите Compare difference из трех точек.

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

Мы предоставили вам различие определений на панели (left panel is the original, the right is updated), и вы четко поймете, на чем следует сосредоточиться, чтобы применить свою идею.

person Merlin Liang - MSFT    schedule 20.02.2020