# Github - Travis

O Travis é uma plataforma de integração contínua gratuita. Através da integração com outros serviços de repositório, como o GitHub, é possível automatizar a geração de builds, garantindo a integração automática de código a partir de repositórios compartilhados.

## Integração Contínua

A Integração Contínua é a prática da Engenharia de Software que dedica atenção à combinação recorrente do código presente em cópias independentes de desenvolvimento em uma linha central de trabalho. Surge como tentativa de garantir que o código desenvolvido paralelamente por equipes separadas seja integrado com segurança, reduzindo a quantidade de defeitos naturalmente introduzidos neste processo.
O conceito foi inicialmente proposto por Grady Booch. No entanto, ganhou grande destaque ao ser introduzido por Kent Bech e Ron Jeffries como uma das práticas do Extreme Programming, onde é proposto que a técnica seja aplicada diversas vezes durante o dia.

### Serviços automatizados

Garantir a integração do código envolve pelo menos a combinação das linhas de desenvolvimento e a execução de testes. Deste modo, a partir do momento em que tal atividade é executada continuamente durante o dia, é conveniente a existência de serviços capazes de executá-la automaticamente.
A automatização pode ser realizada através de scripts, ou através de plataformas desenvolvidas para este fim, como é o caso do Travis e do Jenkins. Algumas plataformas colaborativas de repositório também possuem seus serviços próprios, como é o caso do GitLab, que oferece o GitLab CI.

## Travis

O Travis é uma plataforma de integração contínua gratuita que permite a configuração e execução de builds de forma automatizada. Seus componentes são distribuídos sob a licença MIT, e estão disponíveis no GitHub (como por exemplo o travis-build, travis-web, e travis-core).

### Funcionamento

Um projeto no Travis deve consumir o código de um repositório compartilhado e acessível pela rede (como por exemplo o GitHub, ou qualquer instância do GitLab). De modo geral, cada build será executada em uma máquina virtual recém criada, seguindo os passos definidos por um arquivo de configuração para o preparo, execução, e finalização.
Cada projeto Travis deve ser individualmente configurado, seguindo as tarefas específicas da atividade de integração para cada caso. Considera-se que uma build foi bem sucedida se todos os comandos definidos para a sua execução terminaram se reportar nenhum erro. Caso contrário, a build será marcada como falha.
São alguns possíveis passos de execução para builds automatizadas:
* Execução de tests
* Análise estática de código e relatório de cobertura de testes
* Manipulação do repositório
* Deploy automatizado

### Configuração

Acessar a página do repositório no Github
Na aba "Settings", selecionar no menu lateral a opção "Webhooks & services", e então procurar e selecionar o serviço "Travis CI"
O Github irá solicitar sua autenticação para adicionar o serviço.
O Github irá alertar se o Travis foi adicionado corretamente
Acesse o site https://travis-ci.org/
Se necessário crie sua conta, e então realize o login no site
Na lateral esquerda do site é mostrado os repositórios que estão usando o Travis e ao selecionar um repositório é mostrado seu status
Clique no botão "+" para adicionar um repositório ao Travis
Clique no botão "Sync account" para que o Travis possa ser sincronizado com seus repositórios no Github
Agora há uma lista com seus repositórios, então basta selecionar qual repositório em que deseja utilizar o Travis
Feito os passos acima o serviço do Travis já está cofigurado para funcionar com seu repositório, porém além disso é necessário criar um arquivo de configuração no diretório raíz do seu repositório com o nome ".travis.yml". A documentação do Travis possui templates e exemplos de como fazer o conteúdo desse do arquivo de configuração, mas um layout básico para um projeto python cuja build só executa os testes é o seguinte:
Após configurar o arquivo ".travis.yml" em uma branch e fazer um push para o repositório, o Travis irá executar o que foi definido no arquivo de configuração, no caso desse exemplo o Travis irá executar os testes toda vez que uma branch for enviada ao repositório, e então o Travis notifica se os testes estão passando ou quais testes estão quebrando.
Clicando em algum projeto desse menu lateral o será mostrado os detalhes da execução do Travis, onde se pode analisar cada uma das branchs do repositório e se seus respectivos testes estão passando, e também cada comando que o Travis executou no terminal para rodar os testes.
Os recursos deste guia podem ser encontrados no repositório utilizado para o exemplo, e no projeto Travis do respectivo exemplo.

### Outras Funcionalidades

Como dito, uma build pode ser personalizada conforme as necessidades de cada projeto, o que pode incluir passos de configuração ou preparação de bases de dados. Além do que vai ser executado durante a build (definido no passo script do arquivo de configuração), o Travis oferece outras funcionalidades para a construção de passos mais elaborados.

#### Estágios de execução

Uma build do Travis consiste na execução sucessiva de diversos estágios com propósitos bem definidos, como por exemplo a instalação das dependências, e a execução do script. Cada um destes estágios podem ser sobrescritos para a execução de tarefas personalizadas.
Todos os estágios suportados pelo Travis são:
* before_install
* install
* before_script
* script
* after_success ou after_failure
* before_deploy
* deploy
* after_deploy
* after_script

#### Deploy

Também é possível executar o deploy de aplicações através do Travis. A plataforma possui integração nativa com uma série de serviços (como por exemplo o Heroku e Amazon AWS), mas pode ainda ser integrada manualmente a partir do estágio de deploy.