Pipelines no Github com o Github Actions

Wellington Monteiro
6 min readAug 22, 2022

--

Caso você esteja iniciando a sua carreira em Tecnologia é provável que você irá se deparar com várias soluções de mercado que implementam pipelines para controle de código. Assim, você pode se deparar com tecnologias como:

  • Jenkins;
  • Gitlab CI/CD;
  • Azure DevOps;
  • Travis CI;
  • CircleCI;
  • Codeship.

Todas estas soluções implementam de formas diferentes a mesma ideia: CI (Continuous Integration) do seu código. Caso você não conheça muito sobre CI, recomendo esta leitura de 3 minutinhos da RedHat.

Dito isso, a ideia deste artigo é a de mostrar para você como podemos trabalhar com o Github Actions para testarmos pipelines. Isto pode ser bem útil caso não queira entrar os dados do cartão de crédito para testar no Travis CI/Gitlab, não queira instalar o Jenkins localmente para testar, já esteja acostumado no Github, ou qualquer outro motivo.

Este artigo é dividido em 3 partes. Você pode pular direto para o final caso já tenha alguma experiência com Github e com pipelines (mas não os dois em conjunto):

  • Pré-requisitos para se usar o Github Actions
  • Entrando no Github Actions e criando o primeiro exemplo
  • Criando o próprio workflow
  • Indo um pouco mais além: explorando outros pipelines

Pré-requisitos

É importante que você já tenha um repositório criado no Github contendo código em qualquer linguagem de programação. Para rodar este exemplo em específico eu utilizei Python.

A primeira parte deste tutorial é basicamente uma replicação do próprio tutorial do Github. Já a segunda endereça a criação de um “esqueleto” de um pipeline composto por 3 passos. A terceira parte é opcional, e mostra um pouco mais sobre alguns templates de pipelines que o próprio Github já oferece.

Entrando no Github Actions e criando o primeiro exemplo

O primeiro passo é entrar na página do Github Actions. Você verá uma tela parecida com esta:

Site do Github Actions

Clique no botão Get started with Actions. Você se deparará com uma visão parecida com esta:

Veja que no canto superior direito existe um botão chamado Português do Brasil. Caso a sua página esteja em inglês e queira mudar o idioma, é só mudar neste mesmo lugar (estará escrito English, no seu caso).

Clique no botão QuickStart. Aparecerá este tutorial, visível abaixo:

Passo-a-passo para criar o seu primeiro pipeline.

Siga os passos do item Criar o seu primeiro fluxo de trabalho. Lembre-se: caso tenha dificuldades com o inglês você pode sempre mudar o idioma para Português do Brasil no canto superior direito.

Após seguir os passos do item Criar o seu primeiro fluxo de trabalho o meu repositório ficou com essa cara. Preste atenção especificamente para o .github/workflows. É a pasta que criei seguindo o tutorial.

Não esqueça do ponto antes do “github”. É .github, e não github.

Observe também o botão “Actions”, no menu superior. Vamos também usar ele.

Os resultados ficam disponíveis no botão Actions. Veja que a segunda parte do tutorial mostra justamente como é possível consultar os resultados. Sugiro que faça também esta segunda parte para que conheça melhor esta parte.

Criando o próprio workflow

Agora é a vez de criar um próprio workflow de três estágios. Vamos clicar novamente no botão Actions e em New workflow. Depois, clicaremos em set up a workflow yourself.

Vamos partir da premissa de que temos em mãos um script que funciona no GitLab ou no Jenkins. Ele possui três estágios:

  • Build: geralmente é o passo responsável por compilar a aplicação. Aqui, para fins de teste somente estamos vendo a versão em uso do Python com o python3 -V.
  • Test: geralmente é o passo por executar testes na aplicação. Aqui, para fins de teste somente rodaremos um arquivo chamado teste.py. Criei este arquivo existe dentro do repositório e ele mostra a data e hora atuais.
  • Deploy: geralmente é o passo responsável para deixar aquele arquivo disponível em um servidor ou uma aplicação serverless, como o AWS Lambda e o Azure Functions. Para fins de teste mostramos somente uma frase no log (no caso, “Finalizado!”).
image: pythonstages:
- build
- test
- deploy
build-job:
stage: build
script:
- python3 -V
test-job:
stage: test
script:
- python3 teste.py
deploy-job:
stage: deploy
script:
- echo "Finalizado!"

Aparecerá um arquivo para editar. Vamos substituir pelo código abaixo. É exatamente o teor do arquivo acima, mas com algumas modificações para funcionar no Github Actions. Isto inclui, por exemplo:

  • Existe agora o parâmetro name, o qual possui o nome do pipeline.
  • Existe agora o parâmetro on, o qual inclui as regras responsáveis para a ativação automática do pipeline. No caso, é toda vez em que alguém faz um push ou pull request para a branch chamada main. Você pode modificar ou incluir mais branches. Também existe o workflow_dispatch, que é para ativações manuais.
  • O parâmetro images agora está dentro dos jobs e se chama runs-on. É a configuração do servidor usada para rodar os testes. No Github, geralmente são versões do Linux/Windows/MacOS.
  • O parâmetro stages agora está dentro do jobs e steps.
name: CI

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

workflow_dispatch:

jobs:
build-job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: python3 -V

test-job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: python3 teste.py

deploy-job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: echo "Finalizado!"

Ao finalizar, basta clique no botão Start commit no campo superior direito para finalizar este workflow. Os resultados aparecerão dentro do menu Actions.

Indo um pouco mais além: explorando outros pipelines

Beleza, mas que outras alternativas temos em mãos e que o Github nos oferece? Dentro do botão Actions, clique novamente em New workflow.

Aparecerão algumas sugestões mas, independentemente da linguagem de programação que você escolheu, sugeriria que você navegasse até o final da página. Veja que há um botão chamado Continuous integration. Clique nele.

Existirão opções para diferentes linguagens de programação. Como o meu exemplo foi criado em Python, utilizarei um workflow criado nesta linguagem. Mais especificamente, usarei o Python application.

Aparecerá um arquivo já pré-configurado contendo todos os passos do seu pipeline. Você pode customizar e incluir (ou remover) alguns destes passos. Sugiro usar este exemplo para entender a estrutura e a sintaxe do arquivo.

Se você nunca criou um teste no seu código é provável que se deparará com alguns erros no PyTest. O PyTest é uma biblioteca utilizada para desenvolver testes no seu algoritmo para garantir que ele esteja funcionando de acordo com o esperado. Caso tenha algum interesse por qualidade de código, sugiro a leitura deste artigo.

Exemplo de um workflow padrão de Python application do Github

Finalizando

Você começará a perceber as diferenças nas configurações dos arquivos de pipelines e, ainda, o que você precisa fazer para configurar testes unitários em seu código. Assim, com a devida atenção e tempo você desenvolverá mais competências técnicas. Olha só: é provável que pelo menos uma pessoa começou a ler este artigo querendo entender um pouco mais sobre Github Actions e saiu já com um workflow do Github Actions e ainda leu um pouco sobre testes unitários. Legal, não é? :)

--

--

Wellington Monteiro

Professor @ PUCPR, Lead Machine Learning Engineer @ Nubank. Doutor em IA/Otimização Multi-objetivo e IA em Corporações.