Parceiro Acadêmico: MidAll [B]
O projeto consiste na automação do processo de download de arquivos armazenados na nuvem, transferindo-os para outra nuvem. Isso é realizado por meio do desenvolvimento de uma aplicação como serviço, que oferece um menu de configuração simples para os usuários. Os parâmetros inseridos nesse menu são utilizados para automatizar o download dos arquivos, com a aplicação gerando alertas em caso de falhas no processamento. A aplicação é executada em um servidor local e conta com telas dedicadas à configuração do sistema e à definição dos dados de acesso à API. O sistema emite alertas no sistema operacional para informar sobre novos arquivos baixados e mantém um histórico desses downloads.
Além disso, foi construída uma API que funciona como o serviço responsável por buscar os arquivos de forma automática, seguindo as configurações previamente definidas pelo usuário. Os metadados dos arquivos são salvos para a criação de um dashboard que permite monitorar a execução do serviço, analisar resultados e visualizar indicadores de desempenho.
- Microsoft SQL Server: É um sistema de gerenciamento de banco de dados relacional desenvolvido pela Microsoft, amplamente utilizado para armazenar, manipular e recuperar dados de forma eficiente e segura.
- Python: É uma linguagem de programação de alto nível, interpretada e de propósito geral, conhecida por sua simplicidade, legibilidade e ampla aplicabilidade em diferentes domínios, desde desenvolvimento web até análise de dados.
- Vue.js: É um framework JavaScript progressivo e de código aberto para construção de interfaces de usuário interativas e dinâmicas. Oferece uma abordagem simples e flexível para o desenvolvimento de aplicações web modernas.
- HTML: É uma linguagem de marcação utilizada para estruturar e organizar o conteúdo das páginas da web. Com suas tags e elementos, permite a criação de textos, imagens, links e formulários, fornecendo a base fundamental para a construção de sites. É complementado por outras tecnologias como CSS e JavaScript para estilização e interatividade.
- JavaScript: É uma linguagem de programação versátil e poderosa, utilizada para adicionar interatividade, funcionalidades dinâmicas e comportamentos aos sites.
- Docker: É uma plataforma de virtualização leve e portátil que permite empacotar, distribuir e executar aplicativos de forma isolada, garantindo a portabilidade e consistência do ambiente de desenvolvimento e produção.
- Figma: É uma ferramenta de design colaborativo baseada na nuvem, que permite criar interfaces de usuário, protótipos interativos e compartilhar facilmente os designs com equipes de trabalho, agilizando o processo de design e feedback em projetos de design de produtos e interfaces digitais.
Implementei o código abaixo, criando uma funcionalidade de listagem de arquivos com histórico de transferência para o Amazon S3. Inicialmente, importei os componentes essenciais, como DataTable, Column e Cabecalho do PrimeVue, além do módulo ListagemArquivos, responsável por obter os dados da transferência.
Ao desenvolver o componente 'TabelaView' em Vue.js, utilizei o método listar para obter a lista de arquivos e formatei os metadados, como tamanho e data de modificação, para proporcionar uma apresentação mais legível e compreensível ao usuário.
A implementação dos métodos específicos, como formatarData para lidar com datas e converterSize para ajustar os tamanhos dos arquivos para megabytes, foi essencial para uma apresentação mais amigável das informações.
Código em Vue.js - Tabela
<script>
import DataTable from 'primevue/datatable';
import Column from 'primevue/column';
import ListagemArquivos from '../services/listagemArquivos';
import Cabecalho from '../components/Cabecalho.vue';
export default {
name: 'TabelaView',
components: {
DataTable,
Column,
Cabecalho,
},
data() {
return {
dados: [],
buscar_nome: "",
};
},
mounted() {
this.listar();
this.formatacaoDados();
},
methods: {
listar() {
ListagemArquivos.listar().then((resposta) => {
this.dados = resposta.data.files;
resposta.data.files.forEach(item => {
item.size = this.converterSize(item.size);
});
});
},
formatacaoDados() {
this.converterTamanhoArquivos();
this.converterData();
},
converterData() {
this.dados.forEach(item => {
item.LastModified = this.formatarData(item.LastModified);
});
},
formatarData(data) {
const date = new Date(data);
const dia = date.getDate().toString().padStart(2, '0');
const mes = (date.getMonth() + 1).toString().padStart(2, '0');
const ano = date.getFullYear();
return `${dia}/${mes}/${ano}`;
},
converterSize(size) {
const sizeAtual = (size/1000);
const sizeFinal = sizeAtual + "MB"
return sizeFinal;
},
converterTamanhoArquivos() {
this.dados.forEach(item => {
item.size = this.converterSize(item.size);
});
},
filtro() {
this.novosDados = this.dados.filter(item => item.name.toLowerCase().includes(this.buscar_nome.toLowerCase()));
this.dados = this.novosDados;
},
limpar() {
this.buscar_nome = "";
this.listar();
},
}
};
</script>
Enfrentei desafios ao integrar eficientemente o serviço AWS S3 para a obtenção dos dados. No entanto, a abordagem iterativa de desenvolvimento, testes e ajustes permitiu superar esses desafios com sucesso.
A funcionalidade de busca dinâmica foi implementada por meio do método filtro, garantindo que o usuário pudesse filtrar os arquivos com base no nome em tempo real. A inclusão do método limpar possibilitou reiniciar a busca e exibir todos os arquivos novamente, proporcionando uma experiência intuitiva ao usuário.
Em retrospectiva, a implementação deste componente não apenas atendeu ao requisito funcional de exibir o histórico de transferência de arquivos, mas também ressaltou a importância da abordagem cuidadosa na integração de serviços externos e na apresentação eficiente de dados na interface.
O DevOps representa uma metodologia avançada de desenvolvimento de software que se fundamenta na comunicação eficaz entre desenvolvedores e profissionais de infraestrutura de TI, promovendo uma integração fluida entre os setores de desenvolvimento e operações. Seu principal propósito é acelerar e aprimorar a criação e gestão da infraestrutura de aplicações. Com uma abordagem centrada na cultura, automação e design de plataforma, busca incessantemente agregar valor aos negócios e ampliar a capacidade de resposta às mudanças, garantindo entregas de serviços rápidas e de alta qualidade.
Na prática, o DevOps engloba todo o ciclo de vida do software, desde o planejamento até a implementação, passando pela automação e prestação de serviços. Dessa forma, abarca integralmente cada etapa, contribuindo de maneira decisiva para alcançar o resultado final desejado.
A primeira prática no projeto foi a aplicação do Git Workflow. Abaixo, uma recomendação de como usar o Git e organizar suas branches para realizar um trabalho de maneira consistente e produtiva. A estrutura das branches para versionamento de código foi dividida da seguinte maneira:
-
main - Concentra o código de produção, só pondendo ter mudanças por pull requests (permissão para alteração) da branch develop.
-
develop - Branch destinada para testes de funcionalidades e da ferramenta como um todo, só pode ter mudanças por meio de pull requests (permissão para alteração) das branches features.
-
features - Branches com objetivo de desenvolvimentos das funcionalidades do software.
O Deploy é a prática de disponibilizar a aplicação para uso, seja em um ambiente de desenvolvimento, teste ou produção. O Docker é uma ferramenta que, por meio do uso de containers, facilita o deploy de uma aplicação. Com essa ferramenta, é possível criar imagens que contêm tudo o que é necessário para o funcionamento da aplicação, como dependências e bibliotecas. O uso do Docker permite fazer o deploy de uma aplicação em um servidor.
Docker Compose
version: "3"
services:
backend-app:
container_name: midall-backend-app
image: midall-backend-app
build:
context: ../
dockerfile: ./docker/flask.dockerfile
restart: always
ports:
- "5000:5000"
volumes:
- ${FLASKR_BACK_DEV_DIR}:/flaskr
env_file:
- .env
networks:
network:
driver: bridge
external: false
name: midall-network
FLASKR_BACK_DEV_DIR é uma variável de ambiente definida no arquivo .env
. Essa variável é o caminho onde está o volume da aplicação.
FLASKR_BACK_DEV_DIR = project volume path
DockerFile
FROM python:3.10.6-slim-buster
WORKDIR /flaskr/
COPY ./requirements.txt /flaskr/
WORKDIR /flaskr/
RUN pip install -r requirements.txt
CMD ["python", "-m", "flask", "run"]
DockerIgnore
tests
.vscode
.coveragerc
.pytest.ini
*.iml
**/__pycache__
**/migrations/*
*.md
.git
.gitignore
!README*.md
README-secret.md
Neste projeto fez-se a documentação de cada item DevOps implementado. O link abaixo fornece uma descrição detalhada de cada item, explicando nosso fluxo de trabalho, metodologias utilizadas, ferramentas, tecnologias escolhidas e muito mais.
🔗 Link da Documentação do DevOps no Wiki
Como Product Owner nesse projeto desafiador, meu papel centralizou-se na orquestração do backlog de produto e na coordenação das tarefas do time de desenvolvimento, garantindo a conformidade com os objetivos estabelecidos. Trabalhei em estreita colaboração com as partes interessadas para compreender suas necessidades, enfrentando o desafio de traduzir essas demandas complexas em requisitos claros e priorizados.
O primeiro desafio enfrentado foi a compreensão abrangente dos requisitos de automação do processo de download, transferência e alertas em caso de falhas. Este processo demandou uma análise detalhada para identificar as funcionalidades cruciais e melhorias necessárias para superar os desafios do projeto. A organização e priorização das histórias de usuário foram realizadas considerando o valor agregado e o impacto nos resultados finais.
Tive que esclarecer dúvidas, fornecer orientações precisas e assegurar que todos estivessem alinhados com os objetivos do projeto foram elementos críticos. Conduzi reuniões de planejamento de sprint para revisão e refinamento do backlog, definindo metas para cada iteração. Colaborei ativamente com a equipe para segmentar as histórias de usuário em tarefas específicas e acionáveis, promovendo eficiência e compreensão clara das expectativas e prazos.
Durante a implementação do projeto, adquiri aprendizados significativos que contribuíram para o meu desenvolvimento como desenvolvedor. A criação do componente 'TabelaView' para listar arquivos com histórico de transferência para o Amazon S3 proporcionou valiosas lições.
Ao adotar a abordagem DevOps, compreendi como a comunicação eficiente entre equipes pode acelerar o ciclo de desenvolvimento, otimizar a criação e gerenciamento da infraestrutura de aplicações, e promover entregas mais rápidas e de alta qualidade. Esse aprendizado não apenas aprimorou minha compreensão dos processos de desenvolvimento ágil, mas também enfatizou a importância da cultura, automação e design de plataforma no contexto do DevOps.
A introdução e aplicação do Docker no projeto foram fundamentais para facilitar o deployment da aplicação. Utilizando containers, pude criar imagens contendo todos os elementos necessários para o funcionamento da aplicação, simplificando o processo de transferência e garantindo consistência nos ambientes de desenvolvimento, teste e produção. Isso aprofundou meu conhecimento em virtualização e orquestração de contêineres, permitindo uma gestão eficiente da infraestrutura da aplicação.
Tecnologia/Metodologia | Nota | Classificação |
---|---|---|
Metodologia Scrum - Product Owner | ★★★★★ | Sei fazer com autonomia |
Microsoft SQL Server | ★★★☆☆ | Entendi |
Python | ★★★★☆ | Sei fazer com ajuda |
Vue.js | ★★★★☆ | Sei fazer com ajuda |
HTML | ★★★★★ | Sei fazer com autonomia |
JavaScript | ★★★★★ | Sei fazer com autonomia |
Docker | ★★★★☆ | Sei fazer com ajuda |
Figma | ★★★★★ | Sei fazer com autonomia |
Habilidade | Descrição |
---|---|
Aprendizado | Adquiri um conhecimento maior ao assumir o papel de Product Owner pela segunda vez. |
Desenvolvimento de Equipe | Trabalhei na melhoria da colaboração da equipe, utilizando práticas como Sprint Planning e Sprint Review. |
Feedback | Aprimorei minhas habilidades de fornecer e receber feedback, contribuindo para a evolução contínua do produto. |
Gestão de Riscos | Lidei com a identificação e mitigação de riscos, aplicando estratégias para garantir o sucesso do projeto. |
Adaptação | Ajustei o planejamento do projeto conforme as mudanças nas necessidades do cliente, utilizando a abordagem ágil. |