Pact Broker via Docker Images

Eduardo Pacheco Celeste
beyondTest
Published in
4 min readMay 4, 2020

Passo a passo de como inicializar o Pact Broker através de imagens Docker

O intuito deste mini-tutorial é apenas para servir de base para o artigo Criando e executando Testes de Contrato com Pact.js.

Pré-requisitos: Necessário ter o Docker rodando localmente para seguir todas as etapas descritas abaixo. O passo a passo de como instalar o Docker (em todos os sistemas operacionais) podem ser encontrados diretamente através de sua página: link. Caso queiram saber mais detalhes segue um tutorial explicando o básico sobre o seu funcionamento: Docker-Primeiros passos.

Segundo a documentação do Pact, para usuários do Mac, é necessário também a instalação via Homebrew do coreutils. Uma vez instalado basta agora executar o seguinte comando:

$ brew install coreutils

Primeiro passo: Será necessário a instalação de duas imagens para que o Broker funcione. Porém antes de realizarmos a instalação vamos criar um volume para que assim as informações não se percam caso, por exemplo, precisemos reiniciar a nossa máquina ou o container tenha algum tipo de problema.

Os comandos para criar e verificar o volume são estes abaixo:

Segue em formato texto pra facilitar e só dar um copy/paste:

$ docker volume create pgdata$ docker volume inspect pgdata

Segundo passo: Realizar o pull da imagem do postgres:

$ docker run --name pactbroker-db -e POSTGRES_PASSWORD={PASSWORD} -e POSTGRES_USER={USERNAME} -e PGDATA=/var/lib/postgresql/data/pgdata -v pgdata:/var/lib/postgresql/data -d postgres

Onde é necessário definir um valor para os parâmetros PASSWORD e USERNAME. Podemos verificar também que o volume criado no primeiro passo vai ser utilizado nesta etapa através do parâmetro -v (pgdata:/var/lib/postgresql/data)

O output no terminal deve ser algo parecido com isso caso você ainda não tenha a imagem do postgres instalada:

Terceiro passo: Conectar no container através do seguinte comando:

$ docker run -it --link pactbroker-db:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U {USERNAME}'

IMPORTANTE: Caso ocorra algum erro parecido com isto: psql: Syntax error: Unterminated quoted string se atente para as aspas, conforme for basta alterar as aspas simples do comando para aspas duplas.

Onde o parâmetro USERNAME têm de possuir o mesmo valor utilizado no comando anterior. Após a execução uma senha será solicitada. Esta senha é a mesma definida anteriormente também.

O output deverá ser algo assim:

Quarto passo: Agora estamos dentro do container e aptos para rodar alguns scripts psql:

$ CREATE USER pactbrokeruser WITH PASSWORD 'root';$ CREATE DATABASE pactbroker WITH OWNER pactbrokeruser;$ GRANT ALL PRIVILEGES ON DATABASE pactbroker TO pactbrokeruser;
  • O primeiro comando realiza a criação de um user dentro do banco chamado 'pactbrokeruser' com a senha 'root' (Senha pode ser a que você desejar);
  • O segundo cria um novo database chamado 'pactbroker' e define o usuário 'pactbrokeruser' como dono da database;
  • E o terceiro comando dá todos os privilégios do banco 'pactbroker' para o user 'pactbrokeruser';
  • Pra sair do console do psql basta digitar o comando \q

O output deverá ser parecido com isto:

Quinto passo: Realizar o pull da imagem do pact-broker:

$ docker run --name pactbroker --link pactbroker-db:postgres -e PACT_BROKER_DATABASE_USERNAME=pactbrokeruser -e PACT_BROKER_DATABASE_PASSWORD=root -e PACT_BROKER_DATABASE_HOST=postgres -e PACT_BROKER_DATABASE_NAME=pactbroker -d  -p 9292:9292 pactfoundation/pact-broker
  • Onde os parâmetros PACT_BROKER_DATABASE_USERNAME e PACT_BROKER_DATABASE_PASSWORD deverão conter os valores definidos no primeiro passo do quarto passo.

E o output no console será algo parecido com isto caso a imagem do docker não tiver sido baixada anteriormente:

Para validar se o Pact está funcionando conforme o esperado, basta acessar a URL: http://localhost:9292/ e algo como o mostrado abaixo deverá ser apresentado:

Em caso de dúvidas ou problemas durante o processo, descrevam abaixo nos comentários.

--

--