Azure DevOps Pipeline - API выпуска - обновление определения выпуска, добавление и удаление шаблонной стадии - PullRequest
0 голосов
/ 19 февраля 2020

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

API делает c не очень легким для понимания.

Мой вопрос:

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

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

Do c х https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/update%20release?view=azure-devops-rest-5.1#releasedefinitionshallowreference

1 Ответ

0 голосов
/ 20 февраля 2020

API, который вы должны использовать: Определение обновления API:

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

Для тела запроса добавление stage / удаление Этап, фактически, он только внес изменения в параметр environments:

enter image description here

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

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: это идентификатор стадии, который вы указали для stage, его значение должно быть меньше чем 1 . Здесь допустимо любое значение меньше 1.

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

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

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

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


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

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...