Rodar DEVBot local

Além de poder utilizar o bot diretamente do chat, você pode executar ele localmente, porem isso só deve ser utilizado para debugar seu código e/ou testar algum funcionalidade em desenvolvimento.

Substituir os Tokens

Para isso você deve ter acesso aos tokens do GitLab no qual o bot utiliza para se comunicar e ter acesso as branchs, MR e criar pipelines.

  • Private Token: AN4sFA_oqdrX_4pLaaxP
  • Trigger Token: add162c8bcd82f830e340e094f3078

Estes tokens acima devem ser inseridos no local de suas constantes no arquivo itflex/bots/devbot/repo.py, para que o bot possa se comunicar com nosso servidor do GitLab.

  • Private Token
...
# L: 19
def _connect_gitlab():
    return Gitlab(GITLAB_URL, private_token="AN4sFA_oqdrX_4pLaaxP")

...
  • Trigger Token
...
    # L: 265
    def trigger_pipeline(
        self, ref: str = "master", vars: Dict[str, str] = None
    ) -> Pipeline:
        if not vars:
            vars = {}

        itflex_project = self.api.projects.get(206)
        pipeline = itflex_project.trigger_pipeline(
            ref, "add162c8bcd82f830e340e094f3078", variables=vars
        )
        return Pipeline(
            id=pipeline.id,
            project_id=itflex_project.id,
            status=pipeline.status,
            web_url=pipeline.web_url,
        )


...

Executar a aplicação

Com a virtual env do projeto devbot habilitada e estando no diretório itflex/bots/devbot, execute o script presente com o seguinte comando:

sudo ./run.sh

Simulando a interação do chat

Como não precisamos subir uma instância do chat em nossa máquina, podemos executar o shell do python em outra janela (lembre-se de não encerrar o script que executamos anteriormente) e enviar os comandos para nosso bot rodando localmente da seguinte maneira:

import json
from json.decoder import JSONDecodeError
import requests

HTTP_HOST = "127.0.0.1"
HTTP_PORT = 5000

# Aqui lembre-se que o valor no campo text deve ser o comando 
# que desejamos que o bot interprete e que o user_name deve 
# ser um usuário válido.

data = {
    "channel_name": "bot",
    "user_name": "admin",
    "text": "bot testing-rpm deploy epic-41237-copy"
}

requests.post(
    "http://{host}:{port}/chat/webhook".format(  # noqa
        host=HTTP_HOST, port=HTTP_PORT
    ),
    headers={"Content-Type": "application/json"},
    data=json.dumps(data),
)

Executando esse script, você irá perceber que no terminal no qual levantamos o bot, irá apresentar um erro de comunicação com chat, não se preocupe pois esse comportamento já deve ser esperado já que não temos uma instância do chat executando locamente.

Agora sempre que você precisar executar novamente outro comando, utilize este terminal que abrimos por ultimo e troque os valores do dict data e realize o post novamente.