Ir para o conteúdo

Segundo definição da Microsoft: “Extensões são complementos que você pode usar para personalizar e estender sua experiência de DevOps com Azure DevOps. Eles são escritos com tecnologias padrão — HTML, JavaScript, CSS — e são desenvolvidos usando suas ferramentas de desenvolvimento preferidas.”

Podemos criar extensões para serem usadas de várias formas:

  • Hubs e grupo de Hubs;
  • Menus de contexto e barra de ferramentas;
  • Formulário de itens de trabalho;
  • Service Hooks;
  • Widgets para painéis (Dashboards), foco desse artigo.

O que um desenvolvedor quer é código, não é?

Neste repositório, você pode encontrar o código completo para a criação do seu primeiro widget. Mas que tal entender um pouco como funciona? Continue a leitura até o final, ok? Tem mais links no decorrer do texto.


Setup do desenvolvimento

Alguns pacotes NPM são necessários, por conta disso o Node.js precisa ser instalado. Após baixar o Node.js é só executar o instalador e seguir o passo a passo da instalação.

 

Um editor de código é necessário, então costumo usar o Visual Studio Code.


Publicador de extensões

Para publicar extensões você deve ter um publicador de extensões criado e vinculado a sua conta Microsoft. E se você ainda não tem um publicador, é só seguir esses passos abaixo:

 

  1. Acesse o Markplace do Visual Studio;
  2. Clique em Publish extension na barra do topo. Para prosseguir é necessário fazer a autenticação com uma conta Microsoft;
  3. Caso você ainda não tenha um publicador, você será direcionado para a definição. Do contrário, é só clicar em Create Publisher.

 

Com isso você terá o identificador do seu publicador. Perdeu ele? Basta colocar o ponteiro do mouse sobre o publicador que o identificador será exibido.

 

Criando a sua extensão

1. Construa uma estrutura de pastas e arquivos como o modelo abaixo:

|--- src
|--- widget.html
|--- widget-logo.jpg
|--- extension-logo.jpg
|--- vss-extension.json

Os arquivos de imagem podem ser de qualquer tamanho, mas o aconselhável é 96 x 96 pixels.

 

2. Defina a estrutura básica do seu Widget no arquivo widget.html

<html>
<head>
</head>
<body>
<div class="widget">
<div class="title-area">
<div class="title">
<div class="inner-title" id="title">Title</div>
<div class="subtitle" id="sub-title">Subtitle</div>
</div>
</div>
<div class="content" id="content">
Content
</div>
</div>
</body>
</html>

 

3. Estabeleça a conexão com o Azure DevOps

Inicialize o pacote NPM da sua extensão na linha de comando do seu terminal.

npm init -f

O comando acima irá criar o arquivo package.json

 

Baixe o pacote Visual Studio Services Web Extension SDK, também na linha de comando do seu terminal.

npm i vss-web-extension-sdk --save-dev

 

Altere o seu arquivo widget.html incluindo no header o código abaixo:

<head>
<script src="lib/VSS.SDK.min.js"></script>
<script>
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require("TFS/Dashboards/WidgetHelpers", (WidgetHelpers) => {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("Widget", () => {
return {
load: (WidgetSettings) => {
return WidgetHelpers.WidgetStatusHelper.Success();
}
}
});
VSS.notifyLoadSucceeded();
});
</script>
</head>

O bloco acima irá inicializar a conexão com o Azure DevOps, incluir os estilos básicos (CSS), e fará o registro do seu widget notificando que o carregamento ocorreu com sucesso. Detalhe: o registro utiliza o identificador de contribuição do seu widget. (veja mais abaixo)

 

4. Defina o arquivo de manifesto

Edite o arquivo é vss-extension.json, incluíndo o conteúdo abaixo:

{
"id": "AzureDevOpsExtensions",
"publisher": "PUBLISHER",
"version": "0.0.1",
"name": "Azure DevoOps Extensions",
"description": "Conjunto de extensões personalizadas",
"public": false,
"icons": {
"default": "extension-logo.jpg"
},
"categories": ["Azure Boards"],
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"contributions": [
{
"id": "Widget",
"type": "ms.vss-dashboards-web.widget",
"targets": [
"ms.vss-dashboards-web.widget-catalog"
],
"properties": {
"name": "Widget",
"description": "Widget personalizado",
"catalogIconUrl": "widget-logo.jpg",
"previewImageUrl": "widget-logo.jpg",
"uri": "widget.html",
"supportedSizes": [
{ "rowSpan": 1, "columnSpan": 2 }
],
"supportedScopes": [ "project_team" ]
}
}
],
"files": [
{
"path": "src",
"addressable": true,
"packagePath": "/"
},
{
"path": "node_modules/vss-web-extension-sdk/lib",
"addressable": true,
"packagePath": "/lib"
}
]
}

No arquivo de manifesto, algumas propriedades são muito importantes para o funcionamento do widget.

 

Em “files” são selecionados todos os arquivos que serão importados para o pacote, no nosso caso o conteúdo da pasta src e o pacote Visual Studio Services Web Extension SDK.

 

Em contributions os dados do seu widget. Atente-se ao id pois é esse id que será usado para registrar o widget no Azure DevOps e também a uri, que é o caminho para o html do widget, dentro do pacote gerado.

 

Já a propriedade publisher deve ter o identificador do seu publicador no Marketplace.


Empacotando a sua extensão

Agora que nossos arquivos estão concluídos e o manifesto definido, precisamos gerar o pacote para a publicação no Marketplace. Para isso é necessário instalar o Node CLI for Azure DevOps globalmente utilizando o terminal de comando:

npm install -g tfx-cli

 

O Node CLI for Azure DevOps nos libera alguns comandos que são necessários para “empacotar” a nossa extensão gerando um arquivo VSIX. Execute a linha abaixo no terminal de comandos para gerar o pacote:

tfx extension create

 

O comando acima utilizará o arquivo de manifesto para gerar um arquivo VSIX do widget para que será submetido para o Marketplace. O nome do arquivo gerado segue o seguinte padrão:

[IdentificadorDoPublicador].[IdentificadorDaExtensao]-[VersaoDaExtensao].VSIX

Todas os dados do nome são extraídas do arquivo de manifesto.


Publicando a extensão

Acesse a área de Gerenciamento de Publicadores e Extensões do Marketplace do Visual Studio, neste link (lembrando que é necessário ter uma conta Microsoft) e siga os seguintes passos:

 

1. Clique em + New extension e selecione Azure DevOps

2. Selecione o arquivo criado e clique em Upload e aguarde enquanto o seu pacote é verificado.

 

3. Como o pacote esta sendo instalado pela primeira vez e esta privado, a ferramenta vai trazer o alerta abaixo, orientando o compartilhamento para alguma das suas organizações no Azure DevOps

4. Basta incluir a organização que você quer compartilhar o pacote de extensões, informando o nome que é o mesmo da url do seu Azure DevOps

 

5. Agora, basta instalar o pacote na área de administração do Azure DevOps, na opção de extensões. Lá existirá uma aba para os itens compartilhados (Shared). Entre nela, selecione o pacote e peça para instalar.

 


Utilizando o widget da extensão

Agora, com o pacote instalado, basta acessar qualquer Dashboard criado, ou até mesmo criar um novo, procurar o widget e instalar. Pronto!

 

E aí, bora criar o seu?


Outros exemplos e referências:

Outras publicações