Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Azure DevOps Services
Подсказка
Для получения последних рекомендаций по разработке расширений, включая темизацию и миграцию из VSS.SDK, смотрите на портале разработчика пакета SDK для расширений Azure DevOps.
В этой статье вы создадите узел, который будет отображаться в Azure Boards после узлов Sprints и Запросы.
Необходимые условия
- Node.js
- Инструмент упаковки расширений: выполните
npm install -g tfx-cli
Создание структуры расширения
Создайте каталог для расширения и инициализируйте его:
mkdir my-hub-extension cd my-hub-extension npm init -y npm install azure-devops-extension-sdk --saveКаталог должен выглядеть следующим образом:
|--- my-hub-extension |--- node_modules |--- azure-devops-extension-sdk |--- images |--- icon.png |--- hello-world.html |--- package.json |--- vss-extension.json
Создание центральной страницы
Создайте hello-world.html в корневом каталоге расширения. Эта страница загружает пакет SDK, инициализирует его и отображает имя текущего пользователя.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hello World</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
<script>
window.requirejs.config({
enforceDefine: true,
paths: {
'SDK': './lib/SDK.min'
}
});
window.requirejs(['SDK'], function (SDK) {
SDK.init();
SDK.ready().then(() => {
document.getElementById("name").innerText = SDK.getUser().displayName;
});
});
</script>
</head>
<body>
<h1>Hello, <span id="name"></span></h1>
</body>
</html>
Полный список целевых групп концентраторов см. в справочнике по точкам расширяемости.
Создание манифеста расширения
Создайте vss-extension.json в корневом каталоге расширения:
{
"manifestVersion": 1,
"id": "sample-extension",
"version": "0.1.0",
"name": "My first sample extension",
"description": "A sample Azure DevOps extension.",
"publisher": "fabrikamdev",
"public": false,
"categories": ["Azure Boards"],
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"icons": {
"default": "images/icon.png"
},
"contributions": [
{
"id": "hello-world-hub",
"type": "ms.vss-web.hub",
"description": "Adds a 'Hello' hub to the Work hub group.",
"targets": [
"ms.vss-work-web.work-hub-group"
],
"properties": {
"name": "Hello",
"order": 99,
"uri": "hello-world.html"
}
}
],
"scopes": [
"vso.work"
],
"files": [
{
"path": "hello-world.html", "addressable": true
},
{
"path": "node_modules/azure-devops-extension-sdk",
"addressable": true,
"packagePath": "lib"
},
{
"path": "images/icon.png", "addressable": true
}
]
}
Это важно
Измените издателя на название вашего издательства. Сведения о создании издателя см. в разделе "Пакет", "Публикация" и "Установка". Держите public установленным на false во время разработки.
Ключевые свойства манифеста
| Недвижимость | Описание |
|---|---|
| Взносы | Объявляет концентратор.
type является ms.vss-web.hub, и targets указывает, в какую группу концентратора необходимо добавить его. См. точки расширяемости всех целевых групп концентраторов. |
| contributions.properties.name | Отображаемое имя сетевого концентратора. |
| contributions.properties.order | Положение концентратора в группе концентраторов. |
| contributions.properties.uri | Путь (относительно базового URI расширения) страницы, отображаемой в качестве центральной. |
| Области действия | Разрешения, требуемые расширением.
vso.work предоставляет доступ на чтение рабочих элементов. См. области. |
| Файлы | Файлы для включения в пакет. Задайте addressable: true для файлов, которым требуется URL-адрес. |
Дополнительные сведения о манифесте см. в справочнике по манифесту расширения.
Добавьте настроенную группу хабов
Вместо добавления концентратора в встроенную группу концентраторов, например Work или Code, создайте собственную группу концентраторов и добавьте в нее концентраторы. Добавьте как вклад ms.vss-web.hub-group, так и вклад ms.vss-web.hub, предназначенный для него.
"contributions": [
{
"id": "sample-hub-group",
"type": "ms.vss-web.hub-group",
"description": "Adds a 'Samples' hub group at the project level.",
"targets": [
"ms.vss-web.project-hub-groups-collection"
],
"properties": {
"name": "Samples",
"order": 100
}
},
{
"id": "hello-hub",
"type": "ms.vss-web.hub",
"description": "Adds a 'Hello' hub to the Samples hub group.",
"targets": [
".sample-hub-group"
],
"properties": {
"name": "Hello",
"order": 99,
"uri": "hello-world.html"
}
}
]
Основные отличия от добавления концентратора в встроенную группу:
- Целевые показатели
ms.vss-web.project-hub-groups-collectionвклада в группу концентраторов для уровня проекта илиms.vss-web.collection-hub-groups-collectionдля уровня организации. - Массив хаба
targetsиспользует относительную ссылку (.sample-hub-group), чтобы указать на группу хабов, определенную в том же расширении. - Свойство
orderв группе узлов определяет, где группа отображается в навигации.