Neste artigo vamos nos aprofundar em como usar imagens do Docker com workflows no Github Actions.
Vamos começar com o que são imagens do Docker e containers. Em seguida, vamos ver como podem ser úteis dentro dos nossos workflows no GitHub Actions. Finalmente, mostraremos uma aplicação prática.
Imagens do Docker e Containers
Uma imagem do Docker é um template para rodar um container (contêiner). Nela é definido o que vai rodar ali dentro, quais as bibliotecas e configurações estarão presentes no seu contêiner.
Já um container é uma instância de uma imagem em execução. Em outras palavras, um contêiner é um ambiente isolado entre o sistema operacional e outros containers, no nível de processos. Isso inclui o sistemas de arquivos e recursos de rede. Os contêineres geralmente são efêmeros, pois é preferível criar um novo contêiner ao invés de manter contêineres executados por muito tempo.
Nota: Existem várias imagens prontas com serviços mais utilizados para você só baixar e usar, mas dependendo do seu uso, é recomendado aprender a criar uma com as especificações necessárias para o contexto onde será usado.
Github Actions e Containers
Como já vimos em artigos anteriores, o Github Actions usa runners que provisionam uma máquina virtual, usando Ubuntu, Windows ou macOS – para executar seu workflow dentro dela.
O Github Actions também permite usar essa máquina virtual para executar um workflow dentro de um contêiner.
Para isso, é preciso usar o especificador (palavra reservada) container a nível de um job para indicar que todas as etapas executadas dentro desse job usarão as configurações do conteîner, baseado na sua imagem.
Nota: Certifique-se de especificar um runner (com a palavra runs-on) com o ambiente de host apropriado para seu contêiner (ubuntu-latest para contêineres Linux, windows-latest para contêineres Windows).
Neste caso, a nomenclatura a seguir seria a seguinte:
job:
job1:
runs-on: ubuntu-latest
container:
image: <referência da imagem>
Exemplo Prático de como usar uma imagem do Docker com Github Actions
Aqui vou mostrar um exemplo de um workflow usando uma imagem do docker com Golang e o Ritchie CLI (projeto open source mantido pela Zup) configurados:
PS: O Dockerfile dessa imagem pode ser encontrado aqui.
- Na aba Actions (conforme imagem abaixo)
- O resultado: workflow run
Sem o uso do contêiner, aqui eu teria que usar pelo 2 steps dentro do job, um para instalar Golang e outro para instalar Ritchie CLI.
Podemos observar aqui que não foi necessário configurar nenhuma das 2 ferramentas no workflow para conseguir usar Golang ou o Ritchie CLI, pois isso já foi configurado dentro do contêiner através da imagem informada.
Em outras palavras, o uso de um contêiner nos permite criar um ambiente pré-configurado, para não se preocupar com a instalação das ferramentas necessárias para executar nosso workflow, tendo a vantagem de poder ser reaproveitados entre vários workflows similares.
Imagens do Docker com workflows no Github Actions: mais flexibilidade no seu dia a dia
Por hoje é isso galera! Espero que este artigo tenha esclarecido como usar imagens do Docker no Github Actions com seus workflows.
Quem quiser consultar outros exemplos com Github Actions, deixo aqui um repositório pessoal onde testei vários tipos de implementações com a ferramenta.
Lembrando que a documentação do Github Actions em português é muito boa e vale a leitura.