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:
- #1 Pipeline de CI/CD com Django e Github Actions
- #2 Criando um app com Django
- #3 Organização de testes unitários com Django
- #4 CI/CD com Django e Github Actions
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"
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.
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"
Parabéns, criamos nosso workflow e ele fica salvo no seu repositório no caminho: .github/workflows/python-app.yml
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/requirementAgora 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
Ponha uma mensagem se achar necessário e criei o pull request
Agora somos redirecionados para uma tela onde podemos acompanhar todos os passos da nossa workflow em tempo real.
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