Crie um pipeline de construção com o Travis CI
1. Introdução
No desenvolvimento de software moderno, o termopipeline é muito usado. Mas o que é isso?
De um modo geral,a build pipeline is a set of automated steps that move code from development to production.
Os pipelines de construção são ótimos para implementar fluxos de trabalho de integração contínua para software. Eles nos permitembuild smaller changes with greater frequency, com o objetivo de encontrar bugs mais cedo e reduzir seu impacto.
Neste tutorial, veremos como construir um pipeline de construção simples usandoTravis CI.
2. Etapas em um pipeline de compilação
Um pipeline de construção pode consistir em várias etapas diferentes, mas, no mínimo, deve incluir:
-
Compiling code: no nosso caso, isso significa compilar o código-fonte Java em arquivos de classe
-
Executing tests: como executar testes de unidade e possivelmente testes de integração
-
Deploying artifacts: empacotar código em conformidade em artefatos, digamos, em arquivosjar e implantá-los
Se um aplicativo usar tecnologias diferentes,additional steps can be included in the build pipeline. Por exemplo, podemos ter uma etapa adicional que reduz os arquivos JavaScript ou publica a documentação atualizada da API.
3. O que é o Travis CI?
Para nosso pipeline de construção de amostra, usaremosTravis CI, a cloud-based continuous integration tool.
Isso tem vários recursos que o tornam uma ótima opção para começar a criar pipelines:
-
Integra-se rapidamente a qualquer repositório público do GitHub
-
Suporta todas as principais linguagens de programação
-
Implanta em várias plataformas de nuvem diferentes
-
Oferece uma variedade de ferramentas de mensagens e alertas
Em um nível alto, ele funciona monitorando um repositório GitHub para novas confirmações.
Quando uma nova confirmação é feita, ela executa as etapas do pipeline de construção, conforme definido em um arquivo de configuração (mais sobre isso abaixo). Se alguma etapa falhar, o pipeline será encerrado e nos notificará.
Pronto para uso, o Travis CI requer muito pouca configuração. The only required configuration is specifying the programming language.
Sempre podemos fornecer mais configurações para adaptar nosso pipeline, se necessário. Por exemplo, podemos limitar quais ramificações acionam construções, adicionar etapas adicionais ao pipeline e muito mais.
3.1. Versões gratuitas e pagas
É importante saber que o Travis CI tem atualmente 2 ofertas: uma versão gratuita e outra paga
A versão gratuita, indicada pelo nome de domínio.org, oferece recursos completosfor any public GitHub repository. Não há limites para o número de compilações ou repositórios, embora haja limites de recursos impostos quando o pipeline estiver em execução.
A versão paga, que usa o nome de domínio.com, é necessária para repositórios GitHub privados. Ele também oferece compilações mais simultâneas e minutos de compilação ilimitados em comparação com o plano gratuito. Há uma avaliação gratuita das 100 primeiras versões para testar a versão paga.
4. Criando um pipeline de construção com o Travis CI
Para este tutorial, usaremos a versão gratuita mencionada acima. Qualquer repositório público pode ser usado para criar um pipeline gratuito.
Tudo o que precisamos fazer é fazer login no Travis CI com nossa conta do GitHub e autorizá-lo:
Depois de conceder permissões para nossa conta do GitHub, estamos prontos para começar a configurar nosso pipeline de compilação.
4.1. Configurando o Repositório
Inicialmente, todos os nossos repositórios públicos são considerados inativos. Para resolver isso,we need to enable our repository from the account settings page.
Isso lista todos os nossos repositórios públicos, juntamente com um botão de alternância. Clicar no botão de alternância configurará o Travis CI para começar a monitorar esse repositório para novos commits, usando o branch padrão demaster:
Observe que cada repositório também possui um botãoSettings. É aqui que podemos configurar diferentes comportamentos de pipeline:
-
Defina quais eventos acionam o pipeline (envios, solicitações de recebimento etc.)
-
Definir variáveis de ambiente que são passadas para o pipeline
-
O cancelamento automático cria quando novos eventos são acionados
Para este tutorial, as configurações padrão funcionarão bem. Mais tarde, veremos como substituir alguns dos comportamentos padrão.
4.2. Criando a configuração do Travis
A próxima etapa é criar um novo arquivo chamado.travis.yml no diretório raiz de nosso repositório. Este arquivo contém todas as informações necessárias para configurar um pipeline. Without this file, the pipeline will not execute.
Para este tutorial, precisamos apenas incluir a configuração mínima, que especifica a linguagem de programação:
language: java
É isso aí! Sem fornecer mais informações, o Travis CI executará um pipeline simples que:
-
Compila nosso código fonte
-
Executa nossos testes
Assim que confirmarmos o arquivo.travis.yml, o Travis iniciará nossa primeira compilação. Qualquer confirmação adicional para o branchmaster irá disparar compilações adicionais. O painel também nos permite acionar manualmente o pipeline a qualquer momento, sem exigir uma solicitação de confirmação ou recebimento.
5. Configuração Adicional
Na seção anterior, vimos que uma única linha de configuração é tudo o que precisamos para executar nosso pipeline de construção. Mas a maioria dos projetos exigirá configuração adicional para implementar um pipeline significativo.
Esta seção descreve algumas das configurações mais úteis que podemos adicionar ao nosso pipeline.
5.1. Alterando o comando de compilação padrão
O comando padrão usado para criar projetos do Maven é:
mvn test -B
Podemos mudar isso para qualquer comando definindo a diretivascript em.travis.yml:
script: mvn package -DskipTests
É possível encadear vários comandos em uma única linhascript usando o operador&&.
Alguns comandos de construção são complexos e podem abranger várias linhas ou ter lógica complexa. Por exemplo, eles podem executar ações diferentes com base nas variáveis de ambiente.
In these cases, it’s recommended to place the build command in a stand-alone script, e chame esse script de dentro do arquivo de configuração:
script: ./build.sh
5.2. Implantando código
As configurações de construção padrão para projetos Java simplesmente compilam o código e executam testes. Os artefatos resultantes (arquivos .jar, etc.) são descartados no final do pipeline, a menos que os implementemos em algum lugar.
O Travis CI suporta uma variedade de serviços de terceiros bem conhecidos. Os artefatos podem ser copiados para muitos sistemas populares de armazenamento em nuvem, como Amazon S3, Google Cloud Storage, Bintray e muito mais.
Ele também podedeploy code directly to most popular cloud computing platforms, como AWS, Google App Engine, Heroku e muitos mais.
Abaixo está um exemplo de configuração mostrando como podemos implantar no Heroku. Para gerar propriedades criptografadas, temos que usarTravis CLI tool.
deploy:
provider: heroku
api_key:
secure: "ENCRYPTED_API_KEY"
Além disso, fornece uma opção de implantação genérica que nos permite escrever nosso próprio script de implantação. Isso é útil se precisarmos implantar artefatos em um sistema de terceiros que não seja suportado nativamente.
Por exemplo, podemos escrever um script de shell que copie com segurança os artefatos para um servidor FTP privado:
deploy:
provider: script
script: bash ./custom-deploy.sh
5.3. Gerenciando quais filiais acionam o pipeline
Por padrão, o pipeline será executado para qualquer confirmação emmaster. No entanto, a maioria dos grandes projetos usa alguma forma de ramificação git para gerenciar ciclos de desenvolvimento.
Travis CI supports both white and blacklisting of git branches para determinar quais confirmações devem acionar o pipeline.
Como exemplo, considere a seguinte configuração:
branches:
only:
- release
- stable
except:
- master
- nightly
Isso iria ignorar os commits nos branchesmasterenightly. Os commits para as ramificaçõesreleaseestable acionariam o pipeline. Observe que a diretivaonly sempre tem precedência sobre a diretivaexcept.
Também podemos usar expressões regulares para controlar quais ramificações acionam o pipeline:
branches:
only:
- /^development.*$/
Isso iniciaria o pipeline apenas para commits em branches que começam comdevelopment.
5.4. Ignorando compromissos específicos
We can use the git commit message to skip individual commits. O Travis CI examinará a mensagem para os seguintes padrões:
-
pule
-
pular
Onde
-
ci
-
travis
-
travis ci
-
travis-ci
-
travisci
Se a mensagem de confirmação corresponder a algum desses padrões, o pipeline não será executado.
5.5. Usando ambientes de compilação diferentes
O ambiente de compilação padrão para projetos Java é o Ubuntu Linux. Os pipelines também podem ser executados no Mac OSX ou no Windows Server adicionando a seguinte configuração em.travis.yml:
os: osx # can also be 'windows'
Mesmo com o Linux, existem três distribuições diferentes que podemos escolher:
os: linux
dist: xenial # other choices are 'trusty' or 'precise'
Obuild platform documentation cobre todos os ambientes disponíveis e suas diferenças.
Lembre-se de que, se alterarmos a plataforma, também poderemos precisar alterar quaisquer scriptsbuild oudeploy personalizados para garantir a compatibilidade. Existem várias maneiras dehandle multiple operating systems na configuração.
5.6. Usando versões diferentes do JDK
Também podemos testar em uma versão específica do JDK definindo a seguinte configuração no arquivo.travis.yml:
jdk: oraclejdk8
Lembre-se de que diferentes ambientes de construção, mesmo as diferentes distribuições Linux, podem ter diferentes versões do JDK disponíveis. Consulte a documentação de cada ambiente para ver a lista completa de versões do JDK.
6. Criar matrizes
Por padrão, sempre que nosso pipeline é executado, ele é executado como um único trabalho. Isso significa que todas as fases do pipeline são executadas seqüencialmente em uma única máquina virtual com as mesmas configurações.
Mas um dos grandes recursos do Travis CI é a capacidade de criar uma matriz de construção. Isso nos permite executar vários trabalhos para cada confirmação, usando valores diferentes para algumas das configurações que vimos anteriormente.
Por exemplo, podemos usar uma matriz de construção para executar nosso pipeline no Linux e no Mac OSX, ou com o JDK 8 e 9.
There are two ways to create build matrices. Primeiro,we can provide an array of values para uma ou mais das configurações de linguagem e ambiente que vimos anteriormente. Por exemplo:
language: java
jdk:
- openjdk8
- openjdk9
os:
- linux
- osx
Usando essa abordagem, o Travis CI expandirá automaticamente todas as combinações de configurações para formar vários trabalhos. No exemplo acima, o resultado seria quatro empregos totais.
The second way to create a build matrix is to use the matrix.include directive. Isso nos permite declarar explicitamente quais combinações queremos executar:
language: java
matrix:
include:
- jdk: openjdk8
os: linux
- jdk: openjdk9
os: osx
O exemplo acima resultaria em dois trabalhos.
Mais uma vez, se construirmos em vários sistemas operacionais, temos que ter cuidado para garantir que nossos scriptsbuildedeployment funcionem em todos os casos. Os scripts de shell não funcionarão no Windows, por exemplo. Devemos usar declarações condicionais adequadas para lidar com diferentes sistemas operacionais.
Existemmore options que fornecem um controle mais granular sobre quais tarefas criar e como lidar com as falhas.
7. Conclusão
Neste artigo, criamos um pipeline de construção simples usando o Travis CI. Utilizando principalmente a configuração pronta para uso, criamos um pipeline que cria código e executa testes.
Também vimos uma pequena amostra de como o Travis CI é configurável. Ele funciona com uma variedade de linguagens de programação e plataformas em nuvem de terceiros. A única desvantagem é que atualmente ele só funciona com repositórios do GitHub.