Como implementar a entrega contínua com o Travis CI e o App Engine

O teste é um aspecto importante da criação de software. Para garantir que os testes de unidade sejam executados em cada criação de um projeto, muitas organizações de engenharia adotaram a prática de integração contínua (CI, na sigla em inglês), que envolve o uso de ferramentas como Jenkins ou Travis CI para garantir que todo o novo código seja testado em busca de erros de maneira automática e consistente. A entrega contínua (CD, na sigla em inglês) vai além, garantindo que você possa implantar cada criação em um ambiente de produção e passar nos testes de integração nesse ambiente. É possível executar testes de integração usando um serviço de CI/CD no Google Cloud para implantar seu app como parte do processo de compilação.

Mesmo que este artigo aborde o Travis CI, a maioria das ideias aplica-se a outras ferramentas de CI, como Jenkins. O Travis se integra ao GitHub e executa testes isoladamente. Além disso, o melhor de tudo é que você não precisa gerenciar sua própria infraestrutura ao executar no Google Cloud.

Sobre o tutorial

Neste tutorial, demonstramos um aplicativo Python Flask que é executado no App Engine e interage com a API Google Books. O app mostra como o Travis CI pode implantar e executar testes completos em um ambiente de teste como parte do processo de testagem, acionado pelo comando git push. No diagrama a seguir, mostramos uma visão geral do processo.

O Travis CI executa testes locais entre o GitHub e a implantação do Google Cloud

O Travis CI tem suporte integrado para implantação em ambientes padrão ou flexíveis do App Engine usando provedores de implantação. Quando você usa esses provedores, algumas das etapas básicas de configuração são iguais, mas o arquivo de configuração é mais simples. Neste tutorial, demonstramos como esses provedores funcionam. O Travis CI faz o download do SDK do Cloud, que também pode ser usado para outros fins que não a implantação, como a execução de emuladores locais para testes de unidade. Mesmo que o tutorial use o provedor de implantação do App Engine, consulte a documentação do Travis CI para mais informações sobre outros provedores.

Neste tutorial, criamos novas credenciais de conta de serviço e chaves de API que serão usadas somente para este tutorial. Para simplificar, as chaves criptografadas são carregadas no GitHub. Esse é um antipadrão de segurança que você precisa evitar em ambientes de produção.

Objetivos

  • Configurar o Cloud Shell para uso com o GitHub.
  • Configurar as contas de GitHub e Travis CI.
  • Bifurcar o código de amostra e habilitá-lo no Travis.
  • Criar um aplicativo do App Engine e criar credenciais para o Travis CI.
  • Instalar as ferramentas de linha de comando Travis.
  • Atualizar o código de amostra do seu projeto e usar o Travis para criptografar segredos.
  • Enviar um novo código para o GitHub e fazer com que o Travis CI teste automaticamente o código no App Engine.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

  • App Engine

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Compute Engine, Google Books, and App Engine.

    Ative as APIs

  5. Crie contas para o GitHub e o Travis CI.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Como configurar o Cloud Shell para sua conta do GitHub

Na maior parte deste tutorial, você usará o Cloud Shell, incluindo o código de confirmação em um repositório do GitHub. O GitHub só permite confirmações usando conexões SSH. Portanto, o Cloud Shell precisa ser configurado com chaves SSH.

  1. No Console do Cloud, clique em Ativar o Cloud Shell.

    ACESSAR o Cloud Shell

  2. Gere uma nova chave SSH.

  3. Adicione a nova chave SSH à sua conta do GitHub.

  4. Verifique se sua chave SSH pode se comunicar com o GitHub.

Como configurar o Travis CI com sua conta do GitHub

  1. Na página do Travis CI, faça login com sua conta do GitHub.
  2. Na página Login no GitHub para continuar com o Travis CI, insira suas credenciais do GitHub e clique em Entrar.
  3. Clique em Autorizar travis-pro.
  4. Na página Integração dos Aplicativos GitHub, clique em Ativar.
  5. Clique em Aprovar e instalar.

Como bifurcar o repositório de código de amostra

Bifurque o repositório no GitHub para substituir as credenciais do projeto de amostra pelas credenciais do seu próprio projeto.

  1. Acesse o repositório de código de amostra e, em seguida, clique em Ramificar.

    Repositório de código de amostra no GitHub

  2. No Cloud Shell, configure o git config local.

    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
  3. Clone o código de amostra. Substitua [YOUR-GITHUB-USERNAME] pelo seu nome de usuário.

    git clone git@github.com:[YOUR-GITHUB-USERNAME]/continuous-deployment-demo.git
    

Como verificar se sua bifurcação está no Travis CI

  • No site do Travis CI, no canto superior direito, clique no seu nome de usuário para abrir as configurações da sua conta.

    Na guia Repositórios, o repositório continuous-deployment-demo é exibido em uma lista.

    Repositórios no Travis CI

    Agora, toda vez que você envia uma confirmação para este repositório, o Travis CI executa os testes configurados e fornece um relatório detalhado dos resultados deles.

Instalar as ferramentas de linha de comando do Travis

Criar um aplicativo do App Engine

  • No Cloud Shell, crie seu aplicativo do App Engine e substitua [REGION] pela sua região do Google Cloud.

    gcloud app create --region=[REGION]
    

Como criar credenciais

Para implantar o app no seu projeto do Google Cloud, é preciso criar dois tipos de credencial:

  • Credenciais de conta de serviço que permitem ao SDK do Cloud fazer autenticação com seu projeto do Google Cloud.
  • Uma chave de API pública que o aplicativo do App Engine usa para se comunicar com a API Books.

Criar uma conta de serviço

  1. No Console de Cloud, abra a página "Contas de serviço do IAM".

    ACESSAR A PÁGINA DE CONTAS DE SERVIÇO DO IDENTITY

  2. Clique em Criar conta de serviço.

  3. Insira um nome da conta de serviço, como continuous-integration-test.

  4. Clique em Criar.

  5. No menu Papel, selecione App Engine > Administrador do App Engine.

  6. Clique em +Adicionar outro papel e selecione Cloud Storage > Administrador de armazenamento.

  7. Clique em Concluído.

  8. Clique em Ações na conta de serviço continuous-integration-test.

  9. Clique em Criar chave.

  10. Em Tipo de chave, selecione JSON.

  11. Clique em Criar. O Console do Cloud faz o download de um novo arquivo JSON no computador. O nome desse arquivo começa com o ID do projeto.

  12. Para fazer upload desse arquivo no Cloud Shell, clique em Mais e selecione Fazer upload do arquivo.

    Botão de upload no Cloud Shell

  13. Mova e renomeie esse arquivo para a raiz do repositório do GitHub.

    mv ~/<your_credentials_filename>.json ~/continuous-deployment-demo/client-secret.json
    

Crie a chave da API Books

  1. No Console do Google Cloud, abra a página "Credenciais de API".

    Acesse a página "Credenciais"

  2. Vá para Criar credenciais > chave de API.

    Página &quot;Criar credenciais&quot;

  3. Uma chave é criada automaticamente. Copie a chave da API e clique em Fechar.

  4. No Cloud Shell, adicione a nova chave de API ao arquivo api_key.py. Substitua [YOUR_API_KEY] pela chave da API que você copiou anteriormente.

    export API_KEY=[YOUR_API_KEY]
    cd ~/continuous-deployment-demo
    echo "key = '${API_KEY}'" > api_key.py
    

Criptografar as credenciais para o Travis CI usar

Essas credenciais são adicionadas a um repositório público do GitHub e, portanto, precisam ser criptografadas.

O Travis CI pode descriptografar apenas um arquivo. Você cria um arquivo tar que contém as credenciais necessárias, criptografa os arquivos localmente, adiciona o arquivo criptografado ao repositório do app e configura o Travis para descriptografar as credenciais durante o processo de implantação. Para mais informações, consulte Como criptografar arquivos para o Travis CI.

  1. No Cloud Shell, crie um arquivo tar que contenha as credenciais necessárias:

    tar -czf credentials.tar.gz client-secret.json api_key.py
    
  2. Usando as ferramentas de linha de comando do Travis CI, faça login no Travis CI:

    travis login --pro
    
  3. Quando solicitado a concluir a instalação do shell, insira Y e, em seguida, suas credenciais do GitHub.

  4. Criptografe o arquivo de credenciais:

    travis encrypt-file credentials.tar.gz --pro
    
  5. Quando solicitado a substituir o arquivo existente, insira yes.

  6. Copie a linha de saída que começa com openssl aes-256-cbc para a área de transferência.

    Saída do console que começa com o `openssl`

  7. Configure o Travis CI para descriptografar as credenciais ao atualizar .travis.yml usando sed. Substitua [YOUR_COMMAND_OUTPUT] pela saída do console que você copiou na etapa anterior.

    sed -i 's/DECRYPT_COMMAND/[YOUR_COMMAND_OUTPUT]/g' .travis.yml
    
  8. Edite os arquivos .travis.yml e e2e_test.py para refletir o nome do seu projeto:

    sed -i "s/continuous-deployment-python/${DEVSHELL_PROJECT_ID}/g" .travis.yml
    sed -i "s/continuous-deployment-python/${DEVSHELL_PROJECT_ID}/g" e2e_test.py
    
  9. Adicione o arquivo criptografado de credenciais ao repositório:

    git add credentials.tar.gz.enc .travis.yml e2e_test.py
    git commit -m "Adds encrypted credentials for Travis and updates project name"
    

Confirmar ao GitHub e testar com o Travis CI

Agora que você configurou o aplicativo de amostra do Travis CI e ativou o Travis CI na sua bifurcação do projeto no GitHub, é possível enviar a versão mais recente do código para assistir a um ciclo de criação e teste.

git push origin master

Enquanto o teste é executado, é possível assistir a saída de compilação em tempo real no painel do Travis. Se os testes e a implantação no App Engine forem bem-sucedidos, seu processo de CI/CD foi executado com êxito. O processo é definido pelo arquivo .travis.yml. Para mais informações sobre o .travis.yml, acesse a documentação do Travis CI.

Painel do Travis com saída do teste

Saída adicional

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

É possível excluir o projeto completamente ou interromper o App Engine.

Excluir o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir