Como usar imagens do Docker com workflows no Github Actions

Neste artigo você vai ver:

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.

  1. workflow inicial
  1. Na aba Actions (conforme imagem abaixo)
Print da interface gráfica do Github em um repositório de POC onde mostra os registros de execução do workflow de outputs.

  1. O resultado: workflow run
Print da interface gráfica do Github em um repositório de POC onde mostra a estrutura do workflow anterior no Github Actions.
Ilustração da interface gráfica do Github em um repositório de POC onde mostra o resultado do job build no workflow anterior no Github Actions.

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.

Referências

Capa do artigo "Como usar imagens do Docker com workflows no Github Actions" onde vemos uma mulher de jovem de cabelos pretos e lisos programando.
foto Guillaume Falourd
Back-end Developer
Zupper tentando transformar o complexo em simples através de conteúdos diversificados, com intuito de impactar o mercado de TI e as pessoas ao seu redor da melhor forma possível.

Artigos relacionados

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.