Como usar um Bot Slack para acionar seu servidor de CI

Compartilhe

Compartilhar no facebook
Compartilhar no google
Compartilhar no twitter
Compartilhar no linkedin

Se você é um Desenvolvedor Android, sabe como é importante ter um bom ambiente de CI (Integração Contínua) disponível para automatizar tarefas e economizar seu precioso tempo. Já pensou que um Bot Slack pode ajudar?

Ele é ainda mais necessário se você estiver trabalhando em muitos projetos, com diferentes tipos de builds e sua equipe for muito pequena. 

Neste contexto, que tal ter um amigo robótico que você pode pedir uma build apenas enviando uma mensagem curta, e ainda ser notificado pelo Slack quando estiver pronta?

Bem, parece promissor e é mais fácil do que você imagina! O objetivo deste artigo é mostrar como você pode criar facilmente um Bot Slack para solicitar builds para o seu servidor de CI Jenkins. Vamos lá?

Por que Jenkins?

Você pode argumentar que existem plataformas de CI mais modernas, como o Circle CI. Mas, aqui na Wavy, temos uma realidade um pouco diferente: temos muitos aplicativos legados já configurados em um servidor Jenkins interno e, por enquanto, não queremos investir em uma migração. 

Além disso, há preocupações com a privacidade, em expor o código de nossos projetos a servidores de terceiros devido a acordos contratuais com nossos parceiros. 

Dado esse cenário, o Jenkins é uma ferramenta antiga, mas muito flexível, com inúmeros plugins disponíveis e que atende todas as nossas necessidades.

O bot: Hubot

O Hubot é um projeto de código aberto muito interessante desenvolvido pela GitHub, Inc. Foi escrito para automatizar a sala de bate-papo da empresa. Ele sabe como implantar o site do Github e automatizar muitas tarefas. 

Isso faz parte da estratégia de equipes remotas do Github. Ao fazer solicitações via chat, é muito mais fácil dar visibilidade à equipe remota do que está sendo feito.

O que torna essa ferramenta muito poderosa é a possibilidade de estender os recursos do Bot simplesmente adicionando scripts a ela. Felizmente, um script Jenkins está disponível e é isso que vamos usar para a nossa integração.

Configuração passo a passo

Este artigo pressupõe que você tenha uma instância do Jenkins instalada e em execução com sua build do Android configurada.

Se você precisar de ajuda para criar sua instância do Jenkins, poderá encontrá-la aqui. Uma referência sobre os padrões de build Android está disponível aqui também.

Hubot

Hubot é um projeto node.js. Se você não tiver o node.js instalado, poderá encontrar instruções de instalação aqui. Nós usaremos o gerador de hubot Yeoman para simplificar nosso trabalho. O guia de instalação completo pode ser encontrado aqui.

Primeiro, instale o Yeoman:

 

npm install -g yo

 

Em seguida, instale o gerador de hubot:

 

npm install -g yo generator-hubot

 

Crie uma pasta para conter nosso projeto:

 

% mkdir myhubot

% cd myhubot

% yo hubot

 

Serão feitas algumas perguntas sobre quem está criando o bot e o adapter que você irá usar. O adapter permite a comunicação do Bot com sua ferramenta de chat favorita. No nosso caso, usaremos o adaptador Slack, mas existem outras opções aqui.

Agora é hora de instalar o hubot-jenkins-enhanced:

npm install hubot-jenkins-enhanced –save

O próximo passo é adicionar hubin-jenkins-enhanced como um script externo. Abra o arquivo external-scripts.json e adicione à lista:

 

[

 “hubot-diagnostics”,

 “hubot-help”,

 “hubot-heroku-keepalive”,

 “hubot-google-images”,

 “hubot-google-translate”,

 “hubot-pugme”,

 “hubot-maps”,

 “hubot-rules”,

 “hubot-shipit”,

 “hubot-jenkins-enhanced”

]

Criar um Token de Usuário do Jenkins

Para acessar o Jenkins da sua instância do Hubot, você precisa criar um token de autenticação, seguindo as etapas:

  1. Faça o login no Jenkins;
  2. Clique em seu nome (canto superior direito);
  3. Clique em Configurar (menu do lado esquerdo);
  4. Use o botão “Adicionar novo token” para gerar um novo token. Você deve copiar o token ao gerá-lo, pois não poderá vê-lo posteriormente.

Criar um Slack Token

Para criar um token do Slack, siga as etapas abaixo.

  1. Crie um novo aplicativo na app management page;
  2. Navegue até a página do Bot User e adicione um usuário de bot. O nome de exibição é o nome que sua equipe usará para mencionar seu Hubot no Slack;
  3. Navegue até a página Instalar Aplicativo e instale o aplicativo no área de trabalho. Depois de autorizar a instalação, você será levado de volta à página Instalar aplicativo, mas, desta vez, você terá um token de acesso do Bot OAuth. Copie esse valor, ele será o seu token Slack.

A documentação completa pode ser encontrada aqui.

Executar o Hubot

Agora você está pronto para rodar o Hubot conectado ao Slack e Jenkins:

 

HUBOT_JENKINS_URL=http://my.jenkins.com

HUBOT_JENKINS_AUTH=”your_jenkins_user:your_jenkins_token” HUBOT_SLACK_TOKEN=your_slack_token ./bin/hubot –adapter slack

 

Você pode ver seu bot online, e você pode adicioná-lo à sua seção Slack Apps:

Por fim, solicite sua build:

Se você não tiver um token do Slack, poderá executar o Hubot com o shell adapter, que está disponível por padrão:

HUBOT_JENKINS_URL=https://my.jenkins.com HUBOT_JENKINS_AUTH=”your.jenkins.user:your.jenkins.token” ./bin/hubot

E então, você pode explorar os comandos do Jenkins, de acordo com suas necessidades. Por exemplo, os comandos abaixo listam todas as builds disponíveis e executam a buildmy-android-release-build

 

myhubot> myhubot jenkins list

myhubot> myhubot jenkins build my-android-release-build

 

Se você quiser ser notificado quando a compilação terminar, você poderá adicionar o Jenkins Slack Plugin à sua build do Android no Jenkins.

Conclusões e próximas etapas

Se sua equipe tem a cultura de trabalhar com o Slack ou outros serviços de mensagens, você pode se beneficiar fornecendo ferramentas de automação através do Hubot. Ou seja, o Bot Slack pode ser um grande aliado nas tarefa rotineiras.

A combinação do Hubot com Jenkins fornece muitas possibilidades para economizar tempo. No nosso caso, nosso Jenkins gera APKs para o HockeyApp, Play Store ou Amazon S3. 

Além de poupar tempo dos desenvolvedores, essa abordagem ajuda a equipe a ter visibilidade de todas as atividades que estão sendo feitas para melhorar a comunicação, caso você tenha membros remotos em seu time.

Deixe um comentário

%d blogueiros gostam disto: