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.
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:
- https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-7.2
- https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/authentication-guidance?view=azure-devops
- https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/client-libraries/samples?view=azure-devops#authentication
- https://github.com/microsoft/azure-devops-auth-samples/tree/master/ServicePrincipalsSamples/ClientLibsNET
- https://learn.microsoft.com/en-us/azure/devops/integrate/concepts/dotnet-client-libraries?view=azure-devops
- https://medium.com/@sandeepsinh/create-work-item-with-rest-api-in-azure-devops-28f979a12f37
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.