~/CI/CD com Django e Github Actions

Esse é o quarto post da série Pipeline de CI/CD com Django e Github Actions, nesse post, vamos configurar um workflow para um projeto Django dentro da ferramenta do Github Actions.

Confira a lista de todos os posts da série:

Para facilitar a nossa vida, eu disponibilizei o projeto no meu Github.

❯ git clone https://github.com/f0rmig4/pipeline-django.git

Caso você ainda não tenha puxado seu repositório para o seu Github, agora é o momento, pois você precisará de um repositório para realizar o exercício.

1 - Criando o Workflow:

No seu repositório do github, acesse a aba "Actions"

Print 01

 

Agora selecione a opção "Python application" e vamos realizar o setup do nosso workflow.

O Github Action fornece uma template pronta para diversos tipos de projetos, no nosso exemplo, o fluxo de trabalho irá instalar dependências do Python, executar testes e lint com uma única versão do Python.

Acabei apenas alterando o nome do fluxo de trabalho, modifiquei o teste, onde ele deve rodar os testes da app Django e por fim criei um passo a mais simulando a etapa onde iremos configurar nossa rotina de deploy.

Print 02

name: Django application
on:
push:
  branches: [ develop ]
pull_request:
  branches: [ develop ]
jobs:
build:
  runs-on: ubuntu-latest
  steps:
  - uses: actions/checkout@v2
  - name: Set up Python 3.9
    uses: actions/setup-python@v2
    with:
      python-version: 3.9
  - name: Install dependencies
    run: |
      python -m pip install --upgrade pip
      pip install flake8 pytest
      if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
  - name: Lint with flake8
    run: |
      # stop the build if there are Python syntax errors or undefined names
      flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
      # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
      flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
  - name: Test with pytest
    run: |
      python manage.py test
  - name: Run Deploy
    run: |
      echo '...'

Depois de configurada sua rotina, é necessário salvar seu arquivo, então basta apenas clicar no botão "Start commit. Essa ação vai abrir um modal onde você pode inserir mais informações. Por fim click no botão "Commit new file"

Print 03

 

Parabéns, criamos nosso workflow e ele fica salvo no seu repositório no caminho: .github/workflows/python-app.yml

Print 04

 

Ainda devemos observar que será necessário criar o arquivo requirements.txt para instalar as dependências.

Baixe as alterações e criei um novo branch a partir do branch develop

❯ git pull origin develop
❯ git branch feature/requirement
❯ git checkout feature/requirement
Agora vamos criar nosso requirement:
❯ touch requirements.txt
❯ echo "django" >> requirements.txt

 

2 - Gerando um PR:

Vamos agora dar um push na nossa branch e criar um pull request no nosso repositório

❯ git add requirements.txt
❯ git commit -m 'Create requirements' .
❯ git push origin feature/requirement

Vamos retornar ao Github e ele vai nos informar que temos um novo branch.

Precisamos fazer um compair e um pull request

Print 05

 

Ponha uma mensagem se achar necessário e criei o pull request

Print 06

 

Agora somos redirecionados para uma tela onde podemos acompanhar todos os passos da nossa workflow em tempo real.

Print 07

 

Além de permanecer um histórico de deploys toda vez que roda uma nova publicação os emails cadastrados no repositório irão receber um email de notificação.

Tem uma pegadinha, eu não configurei a rotina para realizar o deploy da aplicação, apenas exemplifiquei o passo do nosso workflow onde ficaria essa etapa. Quem sabe para um próximo post eu criei um novo tutorial de como configurar o deploy para o Heroku.

Então, chegamos ao fim de toda a nossa jornada, passamos por uma abordagem teórica e construímos toda uma simples pipeline utilizando Django, Github e Github Action.

Qualquer dúvida não deixe de perguntar.

Que a força esteja com vocês!


Published Jul 28, 2021 by f0rmig4