CI/CD na Prática  com GitHub Actions

Samuel Rodrigues

  • Professor na Unijuazeiro há 11 anos
  • Tec. T.I. na UFCA há 6 anos
  • Tecnólogo em Eletromecânica - Centec
  • Especialista em Engenharia de Software - FJN
  • Mestre em Engenharia de Software - Cesar School
  • Marido de Roberta
  • Pai de Gregório
  • NERD

O que é CI/CD?

O Problema

 Desenvolvedores  trabalhando isoladamente por um longo período e só juntado suas alterações à ramificação principal quando concluíssem seu trabalho.

 

A junção das alterações de códigos era difícil e demorada, além de resultar no acúmulo de erros sem correção por longos períodos.

 

Estes fatores dificultavam uma distribuição de atualizações rápida para os clientes.

Solução:  Integração Contínua

Refere ao estágio de criação ou integração do processo de lançamento de software, além de originar:

  • um componente de automação (ex.: uma CI ou serviço de criação); e
  • um componente cultural (ex.: aprender a integrar com frequência)

A integração contínua (CI) é uma prática de desenvolvimento de software de DevOps em que os desenvolvedores, com frequência, juntam suas alterações de código em um repositório central. Depois disso, builds e testes são executados

Qual o objetivo da CI

  1. Encontrar e investigar bugs mais rapidamente;
  2. melhorar a qualidade do software; e
  3. reduzir o tempo que leva para validar e lançar novas atualizações de software.

Pilares Fundamentais

  • Sistema de Controle de Versão
  • Automatização de build
  • Self-testing build
  • Integração diária

CD extends CI

A entrega ou distribuição contínua  (CD) é uma prática de desenvolvimento de software na qual as alterações de código são automaticamente preparadas para uma liberação para produção.

CD != CD

Continuous Delivery

Continuous Deployment

Distribuição/Entrega contínua vs. Implantação contínua

O produto é criado, testado e enviado para um ambiente de teste ou preparação, que não pertence à produção

A atualização da produção ocorre automaticamente, sem aprovação explícita

Distribuição contínua vs. Implantação contínua

CI/CD Pipeline

E o que é isso mesmo?

  • É uma ferramenta que permite automatizar fluxos de trabalho (workflow) de CI e CD dentro do próprio GitHub.
  • Você pode escrever tarefas individuais (actions) e combina-las para criar um workflow padronizado.

Workflow?

Workflows são processos automatizados que podem ser configurados em seu repositório para construir, testar, empacotar ou implantar qualquer projeto (no Github).

 

É basicamente, um pipeline CI/CD

Github Workflow

Jobs

  • Uma séria de passos (steps) que podem ser executados no mesmo runner.
    • Podem ser definidas regras de dependências
    • Podem ser executados em paralelo eu sequencialmente dependendo do status do job anterior.

Runners

  • Qualquer máquina com GitHub Actions Runner Instalado
  • Responsável por executar seus jobs quando um de seus eventos é disparado
  • Podem ser hospedadas no GitHub (GitHub Runners) ou administradas externamente por você (Self-hosted Runners)

Runners

  • Os GitHub Runners pode ser Linux, Windows e MacOS.
    • Veja mais aqui.
  • Já possuem software e as ferramentas mais usadas instalados por padrão (não é possível configura-las)
    • Já possuem ferramentas e suporte a linguagens (Python, Ruby, nodejs), Android SDK e Xcode.
    • Veja mais aqui.
  • Self-Hosted Runners possibilitam mais controle do hardware, sistema operacional e ferramentas.

"Vamos botar o treco pra rodar?"

O que vamos precisar...

  1. uma conta no github;
  2. npm ou yarn instalado;
  3. vscode com alguns plugins;
  4. Conta do surge (para implantar o review)

Crie o Projeto React

npx create-react-app react-app –-use-npm

1. Com o node instalado execute:

2. abra o projeto no vscode 

Teste no CI

CI=true npm test 
($env:CI = "true") -and (npm test)
set CI=true&&npm test

Bash

PowerShell

Prompt de Comando

Teste no CI

CI=true npm test 
($env:CI = "true") -and (npm test)
set CI=true&&npm test

Bash

PowerShell

Prompt de Comando

Teste

npm test

Teste com Relatório

CI=true npm test -- --coverage  
($env:CI = "true") -and (npm test -- --coverage)
set CI=true&&npm test -- --coverage  

Bash

PowerShell

Prompt de Comando

Build do Projeto

npm run build

Criando um Workflow com Github Actions

GitHub Flow

  1. build
  2. test
  1. build
  2. test
  3. upload artifacts
  4. deploy (to review)

Configurando o Repositório

  1. Criar a pasta .github/workflows
  2. Criar o projeto react-app no github e realizar o push do projeto
  3. Configurar as permissões de branch master em settings ▶ branches Add rule
  4. Adicionar o remoto e testar as regras

Criando o workflow...

Muito Obrigado!

Samuel Rodrigues

samuel.rodrigues@unijuazeiro.edu.br

samuelclerod@gmail.com

@samuelclerod

Tem interesse em um curso maior? clica aqui e me fala!

CI/CD na prática

By Samuel Rodrigues

CI/CD na prática

Slides para ao minicurso de Integração e Entrega contínua

  • 122