1. Início
  2. Desenvolvimiento de software
  3. Como fazer deploy de imagem docker no Heroku utilizando Spring Boot

Como fazer deploy de imagem docker no Heroku utilizando Spring Boot

Como fazer deploy de imagem docker no Heroku utilizando Spring Boot

Hey, pessoal, como vai!?

Atualmente (2019-2020), o mercado de TI tem evoluído.

Novas tendências têm surgido e ganhado espaço e umas das tendências é o CI, que é o “Continuous Integration” (em livre tradução “Integração Contínua”).

Juntamente com o CD, que é o “Continuous Delivery” (em livre tradução “Entrega Contínua” ou em alguns casos pode ser entendido como “Deploy Contínuo”).

O texto em questão tem como objetivo explicar como fazer o deploy de uma imagem docker na plataforma do Heroku através do Bitbucket, sendo mais preciso, utilizando a ferramenta “bitbucket-pipeline”.

Desta forma, será realizado um deploy assim que um “commit” for feito no Bitbucket.

O texto é destinado para estudos, como escolha da linguagem de programação será utilizado Java, utilizando “Springboot” com “maven”.

Conhecimento prévio para o deploy

Importante informar que, cabe a cada um aperfeiçoar e/ou modificar o que está sendo passado aqui para melhor atender a suas necessidades e preferências.

Presume-se aqui que, para chegar até este ponto o leitor tem alguma familiaridade com o BitBucket (muito mais que um versionador
de arquivo), no caso, utilizar “git”.

E, certa familiaridade com o Heroku e que talvez tenha conta em ambos.

Para quem não tem conhecimento recomenda-se procurar sobre o assunto, tanto sobre o Bitbucket quanto sobre Heroku.

Para fazer este exemplo foi utilizado como IDE o “Intellij Community” e como sistema operacional “Ubuntu 18.04 LTS”.

A árvore do projeto fica da seguinte forma:

Existir essa raíz é fundamental

Observe que existe o arquivo bibtbucket-pipeline.yml na raíz do
projeto e isso é fundamental para que se possa ter sucesso.

Porém, será falado um pouco mais sobre ele e alguns outros pontos mais a
frente.

Heroku

Será feita a configuração correspondente ao Heroku.

Neste momento será criada a aplicação, será adicionado as variáveis de ambiente e será gerada a “API key”.

Criar a aplicação no Heroku

criar uma aplicação no heroku
Fácil e rápido

Adicionar variável de ambiente

O motivo de se ter variável de ambiente é por conta de que será informado qual o “Profile” será utilizado para inicializar a aplicação no Heroku.

No caso, como exemplo, é possível que se queira ter um ambiente de teste, ou de desenvolvimento, ou produção e por conta disto, será passada essa informação através da variável de ambiente.

Para adicionar uma variável de ambiente, é necessário que na área
do projeto criado

  • Vá em “Settings”;
  • Clique em “Reveal Config Vars”;
  • Informe as variáveis, que neste caso será informado como
    key: SPRING_PROFILE e como value: heroku;
  • Após informar, é só clicar no botão add.
Variável adicionada!

API key

Neste momento deve-se guardar a “API Key”, pois essa chave que possibilitará fazer o deploy de fora da plataforma do Heroku.

Para tal, vá em “Account settings” e em seguida vá ao campo “API Key”, se a chave não existir, crie uma.

Criação de uma API key
Criação de uma API key

BitBucket

Chega-se a parte do Bitbucket que é onde a mágica acontece!

Nesta etapa será habilitado o “Bitbucket Pipeline” e será adicionado as
variáveis de ambiente.

Habilitar Pipeline

Na plataforma do Bitbucket será habilitado o “pipeline” e para isso precisa ir até as configurações do projeto que foi criado, depois na opção “Pipeline > Settings” e ativar a opção.

ativando o pipeline
Ativando o pipeline

Adicionar variável de ambiente

Próximo passo será adicionar as variáveis de ambiente ao projeto.

Para isso, deve-se retornar até as configurações do projeto e ir em Pipeline > Repository variables.

Serão adicionadas as variáveis de ambiente HEROKU_API_KEY, essa que foi gerada no passo API Key do Heroku e será adicionada a chave HEROKU_APP_NAME, essa que é o nome da aplicação criada no Heroku.

Tudo isso no repositório de variáveis

Aplicação

Momento de configurar a aplicação para que assim que for realizado um “commit” no “branch master” o “pipeline” entre em ação e faça o deploy no Heroku.

Ressalto que, a linguagem de programação utilizada para este texto está sendo Java com “Springboot”, como IDE está sendo utilizado o “Intellij Community”.

Application.yml

Será criado o arquivo “application.yml” dentro da pasta “resource” do projeto, mesmo nível que o “application.properties”.

Repare que, existem dois “profiles”, um é para desenvolvimento (profile “dev”) e outro é o qual o Heroku (profile “heroku”) irá utilizar na inicialização da aplicação.

Application.yml
Neste arquivo será informado o nome do “profile” e a porta que a aplicação irá inicializar

Bitbucket-pipeline.yml

Neste ponto é necessário criar o arquivo “bitbucket-pipeline.yml” na raíz do projeto.

Ele contém a fórmula que será lida e executada dentro do Bitbucket

Repare que existe “branch: master:”, neste caso, o “pipeline” será executado toda vez que um “commit” for feito no “branch master”.

Dentro desta hierarquia têm os “steps”, esses passos que serão executados através do “script” logo após o “commit” no “branch master” for feito.

  • No “step” com nome “Create Artifact” será executado o comando “mvn -B package” (se por ventura tiver testes os mesmos serão executados).

    Em seguida será guardado temporariamente a pasta “target”, pasta essa que é gerada na execução do comando “mvn -B package”.

    Porque nessa pasta contém os arquivos que serão utilizados na criação da aplicação no “container docker”
  • No “step” com nome “Push docker image to the Heroku” será utilizado o “services” do “docker” para gerar a imagem e em seguida será executado o “script”.

    No script, o primeiro passo é instalar o “heroku standalone” (comando utilizado para instalar: curl https://cli-assets.heroku.com/install-ubuntu.sh | sh).

    Depois logar-se no sistema do Heroku e neste momento ele usará a “API Key” (que colocamos como variável de ambiente) como chave de acesso ao Heroku.

    Em seguida, a imagem docker gerada será enviada e o deploy será feito.

Dockerfile

Nessa etapa será criado o arquivo que será utilizado para criar a imagem docker.

O “Dockerfile” deverá ser criado na raíz do projeto, não deve ter extensão,

criar imagem docker
Ou seja, nada de “Dockerfile.txt”, ou “Dockerfile.yml”, ou “Dockerfile.doc”, ou “Dockerfile.sh”

Repare que a pasta “target/dependency” é utilizada no Dockerfile, por conta dessa pasta que no “bitbucket-pipeline.yml” é gerado o artefato “target/**”.

Também tem a variável de ambiente “SPRING_PROFILE”, essa variável que foi inserida como variável de ambiente no Heroku.

Observe que na linha de comando usada para inicializar a aplicação no docker é utilizado o “CMD”.

Esse é utilizado por conta do Heroku conseguir passar a variável de ambiente, pois se fosse com “ENTRYPOINT” não funcionaria.

Application.properties

No arquivo “application.properties” será adicionado a linha “server.port=${PORT}”.

No caso de ainda está em desenvolvimento, usando o “profile dev”, essa linha será ignorada e a porta será designada pelo que foi descrito no “application.yml” do respectivo “profile”.

Essa linha permite que na inicialização o Heroku consiga disponibilizar uma porta para a aplicação

Após executar esses passos, a aplicação será inicializada no Heroku e no log poderá verificar que a aplicação inicializou com o “profile heroku”.

Simples, né?

Deploy feito!

Pode-se dizer que o fluxo do processo é simples, basicamente terá uma entrada que é o “commit”, um processamento que ocorrerá dentro do Bitbucket e uma saída que será o deploy da imagem docker no Heroku.

A visão macro

O repositório do projeto no Bitbucket.

Obrigado por ter acompanhado até o final e eu espero que, de fato, tenha ajudado!

Quer contratar os melhores talentos tech em menos tempo?

Queremos te ajudar a contratar muito mais rápido e melhor. Podemos começar?

Leituras Recomendadas

Quer receber conteúdos incríveis como esses?

Assine nossa newsletter para ficar por dentro de todas as novidades do universo de TI e carreiras tech.