Поддержка выражений шаблонов в определениях ресурсов репозитория и контейнера
В этом обновлении мы включили поддержку выражений шаблонов в определениях ресурсов репозитория и контейнера. Теперь можно использовать выражения шаблонов при определении ref
свойства repository
ресурса в конвейере YAML, чтобы выбрать ветвь ресурса репозитория. Кроме того, мы добавили поддержку выражений container
шаблонов при определении endpoint
ресурса volumes
ports
и options
свойств ресурса в конвейере YAML.
Дополнительные сведения см. в заметках о выпуске.
Azure Boards
- Изменение типов ссылок рабочих элементов
- Создание временной конечной точки REST запроса
- API пакетного удаления (частная предварительная версия)
- макрос @CurrentIteration в планах доставки
Azure Pipelines
- Выражения шаблонов в определении ресурсов репозитория
- Выражения шаблонов в определении ресурсов контейнера
- Аудит событий для изменений в утверждениях
- Библиотека задач предоставляет модель размещения агента
Azure Boards
Изменение типов ссылок рабочих элементов
Ранее для изменения ссылки на рабочий элемент требуется по крайней мере три шага. Например, чтобы изменить родительскую ссылку на связанную ссылку, необходимо скопировать идентификатор рабочего элемента, удалить родительскую ссылку, добавить новую существующую ссылку типа, а затем вставить скопированный идентификатор и сохранить. Это громоздкий процесс.
Мы решили проблему, позволяя изменять и изменять тип ссылки напрямую. Вы можете быстро изменить тип ссылки только на одном шаге.
Примечание.
Эта функция будет доступна только в предварительной версии New Boards Hubs.
Создание временной конечной точки REST запроса
Мы видели несколько экземпляров авторов расширений, пытающихся выполнять несохраненные запросы, передав инструкцию wiQL для языка запросов рабочих элементов (WIQL). Это работает хорошо, если у вас нет большой инструкции WIQL, которая достигает ограничений браузера на длину строки запросов. Для этого мы создали новую конечную точку REST, чтобы разрешить авторам инструментов создавать временный запрос. Использование идентификатора из ответа для передачи через запросы устраняет эту проблему.
Дополнительные сведения см. на странице документации по REST API для временных запросов.
API пакетного удаления (частная предварительная версия)
В настоящее время единственным способом удаления рабочих элементов из корзины является использование этого REST API для одновременного удаления. Это может быть медленный процесс и подвержен ограничению скорости при попытке сделать любую массовую очистку. В ответ мы добавили новую конечную точку REST API для удаления и (или) уничтожения рабочих элементов в пакете.
Если вы заинтересованы в участии в частной предварительной версии этой новой конечной точки, отправьте нам письмо напрямую.
@CurrentIteration макрос в планах доставки
В этом обновлении мы добавили поддержку @CurrentIteration макроса для стилей в планах доставки. Этот макрос позволит получить текущую итерацию из контекста команды каждой строки в плане.
Azure Pipelines
Выражения шаблонов в определении ресурсов репозитория
Мы добавили поддержку выражений repository
шаблонов при определении ref
свойства ресурса в конвейере YAML. Это была очень запрашиваемая функция нашими Сообщество разработчиков.
Существуют случаи использования, когда конвейер будет проверять разные ветви одного ресурса репозитория.
Например, предположим, что у вас есть конвейер, который создает собственный репозиторий, и для этого необходимо извлечь библиотеку из репозитория ресурсов. Кроме того, предположим, что вы хотите, чтобы конвейер проверял ту же ветвь библиотеки, что и сама по себе. Например, если конвейер выполняется в main
ветви, он должен проверить main
ветвь репозитория библиотеки. Если конвейеры выполняются в dev
ветви, она должна проверить dev
ветвь библиотеки.
До сегодняшнего дня необходимо явно указать ветвь для проверки и изменить код конвейера всякий раз, когда ветвь изменяется.
Теперь можно использовать выражения шаблонов для выбора ветви ресурса репозитория. См. следующий пример кода YAML для использования для не основных ветвей конвейера:
resources:
repositories:
- repository: library
type: git
name: FabrikamLibrary
ref: ${{ variables['Build.SourceBranch'] }}
steps:
- checkout: library
- script: echo ./build.sh
- script: echo ./test.sh
При запуске конвейера можно указать ветвь для library
получения репозитория.
Укажите версию шаблона, расширяемую во время сборки
Шаблоны представляют собой отличный способ уменьшить дублирование кода и повысить безопасность конвейеров.
Одним из популярных вариантов использования является хранение шаблонов в собственном репозитории. Это уменьшает связь между шаблоном и конвейерами, расширяющими ее, и упрощает развитие шаблона и конвейеров независимо.
Рассмотрим следующий пример, в котором шаблон используется для мониторинга выполнения списка шагов. Код шаблона находится в репозитории Templates
.
# template.yml in repository Templates
parameters:
- name: steps
type: stepList
default: []
jobs:
- job:
steps:
- script: ./startMonitoring.sh
- ${{ parameters.steps }}
- script: ./stopMonitoring.sh
Предположим, что у вас есть конвейер YAML, расширяющий этот шаблон, расположенный в репозитории FabrikamFiber
. До сих пор невозможно указать ref
свойство templates
ресурса репозитория динамически при использовании репозитория в качестве источника шаблона. Это означало, что вам пришлось изменить код конвейера, если вы хотите, чтобы конвейер был расширен: расширение шаблона из другой ветви расширяет шаблон из того же имени ветви, что и конвейер, независимо от того, какая ветвь вы запустили конвейер.
Введение выражений шаблонов в определение ресурса репозитория позволяет написать конвейер следующим образом:
resources:
repositories:
- repository: templates
type: git
name: Templates
ref: ${{ variables['Build.SourceBranch'] }}
extends:
template: template.yml@templates
parameters:
steps:
- script: echo ./build.sh
- script: echo ./test.sh
Таким образом, конвейер расширит шаблон в той же ветви, что и ветвь, в которой выполняется конвейер, чтобы убедиться, что ветви конвейера и шаблона всегда совпадают. То есть, если вы запускаете конвейер в ветви dev
, он расширит шаблон, указанный template.yml
файлом в dev
ветви templates
репозитория.
Вы также можете выбрать в очереди сборки, какую ветвь репозитория шаблонов использовать, написав следующий код YAML.
parameters:
- name: branch
default: main
resources:
repositories:
- repository: templates
type: git
name: Templates
ref: ${{ parameters.branch }}
extends:
template: template.yml@templates
parameters:
steps:
- script: echo ./build.sh
- script: echo ./test.sh
Теперь конвейер можно расширить main
шаблон из ветви dev
в одном запуске и расширить шаблон из ветви main
в другом запуске, не изменяя код конвейера.
При указании выражения шаблона для ref
свойства ресурса репозитория можно использовать parameters
и системные предопределенные переменные, но нельзя использовать определяемые пользовательскими переменными YAML или Pipelines.
Выражения шаблонов в определении ресурсов контейнера
Мы добавили поддержку выражений container
шаблонов при определении endpoint
, volumes
ports
и options
свойств ресурса в конвейере YAML. Это была очень запрашиваемая функция нашими Сообщество разработчиков.
Теперь можно написать конвейеры YAML, как показано ниже.
parameters:
- name: endpointName
default: AzDOACR
type: string
resources:
containers:
- container: linux
endpoint: ${{ parameters.endpointName }}
image: fabrikamfiber.azurecr.io/ubuntu:latest
jobs:
- job:
container: linux
steps:
- task: CmdLine@2
inputs:
script: 'echo Hello world'
Вы можете использовать parameters.
и variables.
в выражениях шаблона. Для переменных можно использовать только те, которые определены в файле YAML, но не те, которые определены в пользовательском интерфейсе Pipelines. Если переменная переопределяется, например с помощью команд журнала агента, она не будет иметь никакого эффекта.
Аудит событий для изменений в утверждениях
Утверждения позволяют управлять выполнением этапа. Это часто используется для управления развертываниями в рабочих средах. Аудит позволяет соответствовать требованиям и отслеживать безопасность организации Azure DevOps.
Когда пользователю предлагается утвердить конвейер для развертывания на определенном этапе, пользователь может переназначить утверждение другому пользователю.
До сих пор такие действия не регистрируются в журналах аудита. Эта проблема устранена сейчас.
Журналы аудита будут содержать запись, аналогичную приведенной ниже.
[
{
"Id": "2517368925862632546;00000264-0000-8888-8000-000000000000;839ad1ba-f72b-4258-bc3f-88be7a4553b5",
"CorrelationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
"ActivityId": "a298a06c-965f-4e60-9643-2593f2066e37",
"ActorCUID": "fe950802-bf07-755b-826d-e8dcc066252c",
"ActorUserId": "fe950802-bf07-755b-826d-e8dcc066252c",
"ActorUPN": "silviu@fabrikam.app",
"AuthenticationMechanism": "AAD_Cookie",
"Timestamp": "2022-10-10T11:26:53.7367453Z",
"ScopeType": "Organization",
"ScopeDisplayName": "Fabrikam (Organization)",
"ScopeId": "547a7316-cdf4-40d2-af16-3215f97d053e",
"ProjectId": "4bf16944-3595-421f-9947-79d9eb190284",
"ProjectName": "FabrikamFiber",
"IpAddress": "127.0.0.1",
"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.37",
"ActionId": "ApproverReassigned",
"Data": {
"ApprovalId": "dae6e7c9-2a10-4cd8-b63a-579a6e7ba78d",
"OldApproverUserId": "692b6e2a-dd61-4872-866a-85498da390fc",
"OldApproverDisplayName": "[FabrikamFiber]\\Build Administrators",
"NewApproverUserId": "fe95080b-bf07-655b-226d-e8dcc066252c",
"NewApproverDisplayName": "Jack Fabrikam",
"Comment": "All admins are OOO"
},
"Details": "Reassigned approver of Approval dae6e7c9-9a10-4cd8-b63a-579a6e7ba78d in Project \"FabrikamFiber\" from \"[FabrikamFiber]\\Build Administrators\" to \"Jack Fabrikam\" with comment \"All admins are OOO\".",
"Area": "Checks",
"Category": "Modify",
"CategoryDisplayName": "Modify",
"ActorDisplayName": "Silviu"
}
]
Кроме того, он будет отображаться в пользовательском интерфейсе аудита.
Библиотека задач предоставляет модель размещения агента
Авторы задач, которые хотят определить, работает ли агент в пулах, размещенных корпорацией Майкрософт, или теперь не может использовать функцию getAgentMode()
библиотеки задач для определения модели размещения. Это полезно в сценариях, когда задача хочет повлиять на поведение на основе доступа к сети клиента или нет. Задача может попытаться связаться со службой Azure через частную конечную точку, если она выполняется из локального агента или агентов масштабируемого набора, находящихся в сети клиента.
См . справочник по задачам.
Следующие шаги
Примечание.
Эти функции будут развернуты в течение следующих двух-трех недель.
Перейдите к Azure DevOps и посмотрите.
Отправка отзыва
Мы хотели бы услышать то, что вы думаете об этих функциях. Используйте меню справки, чтобы сообщить о проблеме или указать предложение.
Вы также можете получить советы и ваши вопросы, ответы сообщества на Stack Overflow.
Thanks,
Vijay Machiraju