Automatizando suas builds do Android: como acionar facilmente seu servidor de CI usando um Bot do Slack?

Compartilhe

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

Se você trabalha com desenvolvimento Android, sabe como é importante ter um bom ambiente de CI (Integração Contínua) disponível para automatizar tarefas e economizar seu precioso tempo. É 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 build my-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. 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: