Utilizando o Docker para potencializar Github Actions

nathsouzadev

Nathally Souza

Posted on March 1, 2023

Utilizando o Docker para potencializar Github Actions

PARTE 1 Construindo uma pipeline com o Github Actions

Anteriormente mostrei como podemos construir uma pipeline com Github Actions e até compartilhei uma simplificada para demonstrar o funcionamento. Agora vamos aprofundar um pouco mais e entender como podemos rodar uma instância do Docker com as actions para aumentar a cobertura dos nossos testes.

Antes de entender a implementação, vale a pergunta: porque ter um container nas actions? Não vou aprofundar sobre o uso de container, mas nesse caso, ele permite que implementamos um banco local, que será o nosso database para rodar os nossos testes integrados ou e2e, sem a necessidade de conexão com um banco remoto, além de podermos utilizar filas locais, como o RabbitMQ ou Kafka, por exemplo. Somente nesse ponto, já ganhamos performance para a execução dos nossos testes.

Agora podemos partir para a implementação. Primeiro precisamos criar um arquivo docker-compose.yml, que será onde colocaremos as instruções para montar nossa imagem. No nosso exemplo utilizaremos o Postgres como banco de dados. Para isso, no nosso arquivo, especificamos qual imagem iremos utilizar e já configuramos as variáveis de ambiente, como nome de usuário e senha para acesso ao banco.

Ainda na configuração do docker, finalizamos especificando o nome de uma rede local para utilizarmos.

version: "3.6"

services:
  postgres:
    image: postgres:11.7-alpine
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: admin
      POSTGRES_PASSWORD: password
networks:
  default:
    external:
      name: my-network
Enter fullscreen mode Exit fullscreen mode

Feito essa configuração passamos ao nosso workflow para inserir as novas configurações na execução dos testes. Para isso, precisamos de três comandos do docker.

Essa sequência irá criar a rede local para a execução da nossa instância, posteriormente buildar nossa imagem do docker e por fim apenas exibir os dados da rede que está disponível. Pronto, dessa forma temos uma instância com banco de dados pronta para ser utilizada por nossa aplicação.

    - name: Creating network
      run: docker network create "microservice-network"

    - name: Build docker-composer
      run: docker-compose up -d

    - name: Check running container
      run: docker ps -a
Enter fullscreen mode Exit fullscreen mode

Caso necessário, você pode executar migrations com dados de testes e povoar o banco com as informações para executar os seus testes e rodá-los em sua pipeline. Dessa forma, em menos de 5 minutos, temos um container pronto para nossa pipeline.

💖 💪 🙅 🚩
nathsouzadev
Nathally Souza

Posted on March 1, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related