fga-eps-mds / 2019.1-ADA

A Ada é um chatbot com objetivo de facilitar a transformação full-stack e a integração entre equipes multidisciplinares em organizações envolvidas com desenvolvimento de software através de comunicação fácil e em linguagem natural e monitoramento completo do pipeline de produção de softwares.
https://fga-eps-mds.github.io/2019.1-ADA/
GNU General Public License v3.0
11 stars 3 forks source link

US08 - Eu, como usuário, desejo que a Ada reinicie uma build/pipeline do meu projeto no GitLab CI, caso ela tenha falhado. #194

Closed ErickGiffoni closed 5 years ago

ErickGiffoni commented 5 years ago

Nome da issue

Descrição da Issue

Um projeto no GitLab pode ter uma ou várias pipelines. Quando uma delas falha, o usuário pode pedir à Ada para que ela reinicie essa pipeline, no intuito de que dessa vez a pipeline tenha sucesso.

Tasks:

Critérios de aceitação

ErickGiffoni commented 5 years ago

Começando os trabalhos agora, na parte do github.

ErickGiffoni commented 5 years ago

Essa funcionalidade está descrita em 2 requisições:

  1. Ada faz uma requisição à API da ada-gitlab para conseguir informar ao usuário quais são as pipelines que ele tem no projeto dele. Essa requisição retorna pra Ada os nomes das pipelines do projeto do usuário e os respectivos ids delas. Então a Ada mostra os nomes das pipelines ao usuário e pergunta qual delas ele quer reiniciar. O usuário responde o nome da pipeline, a Ada identifica qual é o id dessa pipeline e ...

  2. Ada faz uma outra requisição à ada-gitlab para que essa pipeline seja reiniciada. O retorno dessa outra requisição deve ser um status, uma mensagem falando se foi possível ou não reiniciar a pipeline referida.

No primeiro tópico, a requisição é feita da seguinte maneira :

http://0.0.0.0:5000/rerun_pipeline/<chat_id>

Já para o segunto tópico, a requisição é a seguinte:

http://0.0.0.0:5000/rerun_pipeline/<chat_id>/<pipeline_id>
ErickGiffoni commented 5 years ago

A parte 1 descrita acima já está 80% feita.

ErickGiffoni commented 5 years ago

Links úteis:

sudjoao commented 5 years ago

Estava dando uma olhada na api do gitlab onde fala sobre pipelines e encontrei uma função que serve para reiniciar os jobs de uma pipeline:

POST /projects/:id/pipelines/:pipeline_id/retry

Creio que, provavelmente, será essa que vamos utilizar nesta issue. Testei ela em um repositório que eu tinha onde a pipeline tinha dado erro e fiz um post utilizando a API e o GitLab começou a rodar a pipeline novamente.

ErickGiffoni commented 5 years ago

@sudjoao Muito bom, João, vamo que vamo

sudjoao commented 5 years ago

O metodo para reinciar build foi criado no repositório AdaGitlab.

Essa funcionalidade está descrita em 2 requisições:

1. Ada faz uma requisição à API da ada-gitlab para conseguir informar ao usuário quais são as pipelines que ele tem no projeto dele.
   Essa requisição retorna pra Ada os nomes das pipelines do projeto do usuário e os respectivos ids delas.
   Então a Ada mostra os nomes das pipelines ao usuário e pergunta qual delas ele quer reiniciar.
   O usuário responde o nome da pipeline, a Ada identifica qual é o id dessa pipeline e ...

2. Ada faz uma outra requisição à ada-gitlab para que essa pipeline seja reiniciada.
   O retorno dessa outra requisição deve ser um status, uma mensagem falando se foi possível ou não reiniciar a pipeline referida.

No primeiro tópico, a requisição é feita da seguinte maneira :

http://0.0.0.0:5000/rerun_pipeline/<chat_id>

Já para o segunto tópico, a requisição é a seguinte:

http://0.0.0.0:5000/rerun_pipeline/<chat_id>/<pipeline_id>

Dei uma olhada aqui e acho que não é necessário fazer 2 rotas, pois, na pasta pipeline, já existe uma função que retorna os pipelines do usuário, acho que podiamos utilizar esse código já feito e apenas criar uma outra rota nessa mesma pasta para reiniciar o pipeline.

guilherme-mendes commented 5 years ago

@sudjoao Acho válido.

ErickGiffoni commented 5 years ago

@sudjoao Eu já previa essa fala. Imaginei que ocorreria. Sim, talvez seja possível usar o código já existente. Talvez. Tem que ver direitinho, porque do jeito que está eu consigo filtrar exatamente o que eu preciso para retornar ao usuário . Se fôssemos usar o código pronto do método da classe Report, por exemplo, não daria, porque esse método não tem retorno. Já em relação à pasta pipeline, não sei ao certo o funcionamento. A princípio acho bom o jeito que está .

sudjoao commented 5 years ago

@vitorandos, o @ErickGiffoni e eu estamos com uma duvida. Estamos pensando em mostrar ao usuário as pipelines do projeto dele que falharam em forma de botões. Cada botão vai ter o nome da pipeline e o id dela, isso porque pipelines podem ter o mesmo nome (isso ocorre quando elas vieram de uma mesma branch, e o que as diferencia é o id). Dai o usuário clica no botão e a gente reinicia a pipeline referente ao botão. O que acha ? Nos responde rápido, por favor, estamos in a hurry.

vitorandos commented 5 years ago

Isso não é viável porque um projeto geralmente tem muitos pipelines que falham.

Como conversei com o @sudjoao ontem, o interessante é permitir que o usuário reinicie um pipeline assim que este falha, ie., logo que ele recebe a mensagem da Ada avisando-lhe que o pipeline falhou.

Logo, poderíamos adicionar um botão logo abaixo dessa mensagem de falha permitindo que o pipeline possa ser reiniciado.

ErickGiffoni commented 5 years ago

@vitorandos A princípio essa notificação não está no escopo da nossa história. Como proceder, então ? Notificar o usuário seria outra funcionalidade, que não está planejada pra essa sprint. Ai como procedemos então ?

vitorandos commented 5 years ago

Essa funcionalidade já está implementada.

Mais informações em US07 e Criar webhook receiver.

ErickGiffoni commented 5 years ago

Fazendo os testes agora com @sudjoao

sudjoao commented 5 years ago

Testes feitos e pull request realizado, apenas aguardando a aprovação.