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:
- Faça o login no Jenkins;
- Clique em seu nome (canto superior direito);
- Clique em Configurar (menu do lado esquerdo);
- 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.
- Crie um novo aplicativo na app management page;
- 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;
- 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.