Существует ли параметр "Создать рабочий элемент при сбое" для конвейеров YAML Azure DevOps?

В "Классических" конвейерах Azure Devops есть раздел в меню "Параметры конвейера", где вы можете включить функцию для автоматического создания рабочего элемента при сбое конвейера. Однако в новых конвейерах YAML эта функция отсутствует в меню параметров. Доступен ли этот параметр каким-либо образом или он не поддерживается для конвейеров YAML?

1 ответ

Решение

Хотя эта опция в настоящее время недоступна через графический интерфейс для конвейеров YAML, тем не менее, она по-прежнему работает под капотом - просто нет простого способа включить ее. Однако вы можете сделать это с помощью REST API Azure DevOps.

Сначала вам нужно знать имя вашей организации, проекта Azure DevOps и идентификатор определения конвейера, который является параметром строки запроса в URL-адресе при просмотре данного конвейера, например https://dev.azure.com/{organization}/{project}/_build?definitionId={definition id}. Затем вы захотите отправить запрос GET в API конвейеров для этого идентификатора, используя этот формат URL:https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definition id}?api-version=5.1. Для аутентификации вы должны иметь возможность использовать обычную аутентификацию, оставив поле имени пользователя пустым и используя в качестве пароля токен личного доступа с соответствующей областью действия.

Если ваш запрос выполнен успешно, вы должны получить ответ, содержащий большой объект JSON, который описывает рассматриваемый конвейер. Там много неактуального, но то, что мы ищем, находится в верхней части: естьoptions массив, который включает следующий элемент:

...
    {
        "enabled": false,
        "definition": {
            "id": "a9db38f9-9fdc-478c-b0f9-464221e58316"
        },
        "inputs": {
            "workItemType": "Task",
            "assignToRequestor": "true",
            "additionalFields": "{}"
        }
    },
...

Этот идентификатор "a9db38f9-9fdc-478c-b0f9-464221e58316"кажется статичным для всех конвейеров и однозначно определяет вариант создания рабочего элемента в случае сбоя. Если мы отредактируем JSON, чтобы изменить"enabled": false" к true (и установите любые другие желаемые параметры в inputsfields), теперь мы можем взять весь ответ JSON из нашего запроса GET и использовать его в качестве тела второго вызова API для того же URL-адреса, на этот раз запроса PATCH. Если все было правильно, вы должны увидеть ваши обновленные изменения, отраженные в ответе от PATCH.

Это немного неуклюже, потому что до сих пор нет возможности проверить, включена ли эта опция через веб-интерфейс, но пока Microsoft не обновит пользовательский интерфейс, чтобы включить эту функцию, это лучший доступный вариант. Еще один полезный совет: если у вас уже есть конвейер в классическом режиме, в который вы добавили дополнительные поля или другие настройки в пользовательский интерфейс, вы можете сделать APIGET на этом конвейере, чтобы извлечь точный JSON для этих настроек и использовать их для передачи вашего PATCH в конвейер YAML.

Другие вопросы по тегам