Estrutura do projeto
Raiz do repositório
Pipeline
Como usar o repositório
O repositório utiliza um modelo monorepo para gerenciar múltiplas pipelines Prefect de forma centralizada e padronizada:-
Dockerfile base: o arquivo
Dockerfilena raiz define a imagem base utilizada por todas as pipelines. Ele inclui as dependências essenciais para execução dos fluxos, como Python, Prefect, drivers de banco de dados e ferramentas auxiliares. Cada pipeline pode customizar sua própria imagem a partir desse Dockerfile base, garantindo consistência e facilidade de manutenção. -
pyproject.tomlcentralizado com uv workspaces: opyproject.tomlna raiz do projeto gerencia as dependências Python de todas as pipelines utilizando uv workspaces.- Cada subdiretório em
pipelines/representa um módulo Python independente, mas todos são importados automaticamente como membros do workspace. - As dependências e configurações definidas no
pyproject.tomlbase são herdadas por todas as pipelines, facilitando a atualização e padronização do ambiente. - Novas pipelines adicionadas à pasta
pipelines/são automaticamente reconhecidas e integradas ao workspace, sem necessidade de configuração manual adicional.
- Cada subdiretório em
Pipelines
Cada pipeline possui:Dockerfile: imagem customizada para execução no Prefectflow.py: definição dos fluxos Prefectprefect.yaml: configuração do deployment Prefectpyproject.toml: dependências específicas da pipeline
Dockerfile de cada pipeline, assim como dependências específicas devem ser adicionadas no pyproject.toml de cada pipeline.
O arquivo prefect.yaml é responsável por definir as configurações de deployment do flow Prefect. Esse arquivo especifica variáveis de ambiente, parâmetros, agendamento, infraestrutura de execução e outras opções necessárias para o correto funcionamento do fluxo. O arquivo também é utilizado nos workflows de CI/CD para registrar e disponibilizar os flows.
Consulte a documentação oficial do Prefect para detalhes sobre todas as opções disponíveis.
Templates
O repositório utilizacookiecutter para facilitar a criação de novas pipelines de forma padronizada. Os templates disponíveis em templates/ permitem gerar rapidamente a estrutura de diretórios e arquivos necessários para uma nova pipeline Prefect, incluindo Dockerfile, flow.py, prefect.yaml e pyproject.toml.
Para criar uma nova pipeline, instale uv e rode:
secretaria e pipeline, que serão utilizados para preencher os nomes dos diretórios, arquivos e variáveis nos templates.
CI/CD
O repositório utiliza GitHub Actions para automatizar todo o ciclo de vida das pipelines, incluindo build, deploy e publicação de imagens Docker:-
Deploy automático dos flows: os workflows
.github/workflows/deploy-prefect-flows-prod.yamle.github/workflows/deploy-prefect-flows-staging.yamlrealizam o deploy automático dos flows Prefect para os ambientes de produção e staging, respectivamente.- O workflow de produção é acionado a cada push na branch
masterou manualmente, sempre que houver alterações em arquivos dentro depipelines/**. - O workflow de staging é acionado a cada push em branches
staging/*ou manualmente, também monitorando alterações empipelines/**. - Ambos executam:
- Checkout do código-fonte
- Login no GitHub Container Registry (
ghcr.io) - Instalação das dependências Python com
uv - Execução do script
.github/scripts/deploy_prefect_flows.py, que faz o deploy automático de todos os flows definidos empipelines/*/prefect.yaml - Caso algum deploy falhe, o workflow é interrompido e o erro é registrado nos logs
- O workflow de produção é acionado a cada push na branch
-
Build e publicação da imagem Docker base: o workflow
.github/workflows/build-and-push-root-dockerfile.yamlé acionado em alterações noDockerfileda raiz a cada push na branchmaster, além de poder ser executado manualmente. Ele realiza:- Build da imagem Docker definida no
Dockerfiledo repositório - Publicação da imagem no GitHub Container Registry (
ghcr.io/${{ github.repository }}:latest)
- Build da imagem Docker definida no
