Ola pessoALL,

Com o crescimento do PowerEmbedded estamos com um desafio de gerenciar melhor os tickets de suporte e as demandas dos usuários. Um das necessidades é que fosse fácil para o time de desenvolvimento ter visibilidade e atrelar isso nos commits/branches. Como utilizamos o Azure Devops para controlar o código e tarefas do sistema, decidimos por integrar a criação dos tickets de suporte direto da plataforma no nosso board.

Vou listar aqui os passos necessários para fazer a integração utilizando a API REST do Azure Devops.

Get started with the REST APIs for Azure DevOps Services and Azure DevOps Server - Azure DevOps Services REST API
Learn the basic patterns for using the REST APIs for Azure DevOps Services and Azure DevOps Server.
Edit 2024-09-11: Vídeo contendo os passos demonstrados aqui no artigo

Autenticação

Para nossa integração escolhi fazer a autenticação por meio de Service Principal para facilitar o lado do desenvolvimento, mas poderia fazer via Identidade Gerenciada para aumentar o nível de segurança.

Precisaremos referenciar 3 pacotes no nosso projeto:

  • Azure.Identity
  • Microsoft.TeamFoundationServer.Client
  • Microsoft.VisualStudio.Services.InteractiveClient

Para comunicar com a API precisaremos de uma instância da classe VssConnection, para facilitar estou registrando ela no contêiner do .net core e a partir dela escolho qual cliente vou usar.

  
  services.AddSingleton(x =>
    {
        var credential = new ClientSecretCredential("seu-tenant-id", "seu-client-id", "seu-client-secret");
        var vssAadCredentials = new VssAzureIdentityCredential(credential);
        var orgUrl = new Uri(new Uri("https://dev.azure.com"), "nome-da-organizacao");
        return new VssConnection(orgUrl, vssAadCredentials);
    });

Trabalhando com Work Items

Agora que temos nossa autenticação definida, precisamos apenas utilizar o cliente correto para manipular os items do nosso Azure Devops, vou deixar 2 exemplos aqui de listar work items e criar um work item.

  
    public partial class SupportController
    {
        public async Task Index(
            [FromServices] VssConnection connection)
        {
            var client = connection.GetClient();
            var workItems = await client.GetWorkItemsAsync("nome-do-projeto", new[] { 638, 668 });
    
            return View(workItems);
        }
    }
  

No código a cima, os números 638 e 668 são os IDs dos work items no projeto.

Para Criar um work item podemos utilizar o seguinte código:

  
    var patchDocument = new JsonPatchDocument
    {
        new JsonPatchOperation()
        {
            Operation = Operation.Add,
            Path = "/fields/System.Title",
            Value = title
        }
    };

    try
    {

        var result = await client.CreateWorkItemAsync(patchDocument, project, "bug");
        Console.WriteLine($"Work item created: Id = {result.Id}");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        return -1;
    }
  

Referências:

Espero que tenham gostado do artigo e me contem nos comentários se vocês pensam em utilizar a integração com o Azure Devops também.

[]s e até a próxima pessoALL.

💡
Podemos te ajudar com uma revisão 100% gratuita do seu ambiente cloud.
Share this post