Skip to content

Português

Elvis Souza edited this page Feb 12, 2022 · 17 revisions

Requisitos

  • SQL Server
  • Aplicação .Net Core 3.1+
  • Conta no Azure DevOps

Instalação e Configuração

Instalação do pacote

PM > Install-Package AzureDevOpsTracker -Version 1.0.1

Passo 1 - Configuração do Startup.cs

Depois da instalação, atualize seu arquivo de Startup.cs OWIN com o seguinte código:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAzureDevopsStateTracker(new AzureDevopsStateTracker.Data.DataBaseConfig("[CONNECTION_STRING]"),
                                        new MessageConfig(EMessengers.MICROSOFT_TEAMS, "[URL_TEAMS]"));
}

public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
    app.UseAzureDevopsStateTracker(serviceProvider);
}

No exemplo acima o Microsoft Teams será usado para lançar o ChangeLog.

Passo 2 - Criando a Controller

Para a integração com o Service Hook do Azure DevOps, é necessário que existam dois EndPoints que recebam uma requisição POST com as Json específicas. Essas requisições receberão dados de Workitems criados e Workitems atualizados.

public class ExampleController : Controller
{
    private readonly IAzureDevopsTrackerService _azureDevopsTrackerService;
    private readonly IChangeLogService _changeLogService;

    public ExampleController(
        IAzureDevopsTrackerService azureDevopsTrackerService, 
        IChangeLogService changeLogService)
    {
        _azureDevopsTrackerService = azureDevopsTrackerService;
        _changeLogService = changeLogService;
    }

    [HttpPost("workitem-updated")]
    public async Task<IActionResult> WorkItemUpdated([FromBody] UpdatedWorkItemDTO updatedWorkItemDTO)
    {
        await _azureDevopsTrackerService.Update(updatedWorkItemDTO);
        return Ok();
    }

    [HttpPost("workitem-created")]
    public async Task<IActionResult> WorkItemCreated([FromBody] CreateWorkItemDTO createWorkItemDTO)
    {
        await _azureDevopsTrackerService.Create(createWorkItemDTO);
        return Ok();
    }

    [AllowAnonymous]
    [HttpGet("release-changelog")]
    public IActionResult ReleaseChangelog()
    {
        var changeLog = _changeLogService.Release();
        if (changeLog is null) return new OkObjectResult("There's no WorkItems waiting for a ChangeLog");
           var message = _changeLogService.SendToMessengers(changeLog);
        return new OkObjectResult(message);
    }

    [AllowAnonymous]
    [HttpGet("count-items-for-release")]
    public IActionResult CountItemsForRelease()
    {
       try
       {
            var count = _changeLogService.CountItemsForRelease();
            var returnText = new StringBuilder();
            if (count == 0 || count == 1)
                returnText.Append($"{count} Item");
            else
                returnText.Append($"{count} Items");

            return new OkObjectResult(new { data = returnText.ToString() });
        }
        catch (Exception ex)
        {
            return new OkObjectResult(new { data = ex.Message });
        }
    }
}

Para mais informações sobre a utilização com Azure Function, consulte nossa página de Azure DevOps Function Tracker.

Configurando o DevOps

Criando Subscrição

Passo1

Configurando serviço

Passo2 Passo3 Passo4

Os mesmos passos devem ser realizados para o WorkItem Updated

Pronto, agora todas as mudanças feitas nos WorkItems já serão salvas automaticamente no banco de dados!! 🎉😍

Exemplos

Tempo por State em uma Sprint:

select 
	t.State, 
	dbo.ToTime(AVG(t.TotalWorkedTime)) as AvgTime,
	dbo.ToTime(MAX(t.TotalWorkedTime)) as MaxTime,
	dbo.ToTime(MIN(t.TotalWorkedTime)) as MinorTime,
	dbo.ToTime(SUM(t.TotalWorkedTime)) as SumTime,
	AVG(t.TotalWorkedTime / 60 / 60) as AvgInHours
from WorkItems w
join TimeByStates t on t.WorkItemId = w.Id
where 1=1 
and w.IterationPath = 'Sprint 12'
and w.Type IN ('Bug', 'Task')
group by t.State

Tasks e Bugs que ficaram mais tempo em Active na Sprint

select 
	w.Id, 
	w.Title,
	dbo.ToTime(t.TotalWorkedTime) as TotalWorkedTime, 
	w.AssignedTo,
	t.TotalWorkedTime
from WorkItems w
join TimeByStates t on t.WorkItemId = w.Id
where w.IterationPath = 'Sprint 12'
and w.Type IN ('Bug', 'Task')
and t.TotalWorkedTime > 60
and t.State = 'Active'
order by t.TotalWorkedTime desc

Live Demo

Temos um banco de dados com um usuário público para você ver e testar o Azure DevOps Tracker em pleno funcionamento!

  • Servidor: tcp:sql-azure-devops-tracker.database.windows.net,1433
  • Banco: sqldb-azure-devops-tracker
  • Usuário: public_user
  • Senha: @Adt123456_

Link do projeto no Azure DevOps que está conectado nesse banco: Azure Devops - TypingHard

Melhorias em andamento

Board Status

Clone this wiki locally