Este documento descreve como o Git pode ser usado para customizar, implantar e manter código em várias instâncias do Moodle na USP de forma distribuída, versionada e colaborativa. O Git permite replicar código comum entre instâncias, atualizar instâncias com melhorias do Moodle enquanto mantém customizações locais, e facilita a contribuição de desenvolvedores externos.
Customização, Deployment e Manutenção de Código usando Git
1. Customização, Deployment e
Manutenção de Código usando Git
Aplicação aos Moodles da USP
Helbert dos Santos, Ewout ter Haar
Grupo Apoio Técnico-Pedagógico – USP
CEPA - IFUSP
http://atp.usp.br
08/10/2012
2. Grupo ATP: Apoio técnico-pedagógico a
Ambientes de Aprendizagem
→ Uma proliferação de Moodles
3. Contexto
• Múltiplas instâncias Moodle (Projetos)
• RedeFor, Licenciatura em Ciências, EVC, Moodle do
Stoa, Moodle de Extensão, etc. etc.
• 270 mil logins/mês
• mais de 35 mil alunos
• Customização por projeto
• temas, plugins, relatórios
• Ambientes requerem alta disponibilidade
4. Problema
Como manter customizações + múltiplas instâncias?
– Acompanhar as atualizações “upstream” (melhorias e segurança)
– Desenvolvimento documentado, versionado e rastreável
– Desenvolvimento distribuído (incorporar contribuições “externas”)
5. Nossa solução
• Software de controle de revisões de código
distribuído (DVCS, distributed version control system) Ex. Git,
mercurial
– Atende aos requisitos
– “Deployment” fácil /
– ágil / seguro
6. Conceitos sobre “Controle de Versões”
1. Versionamento local
• Registra alterações de arquivos
[ProGIT]
7. Conceitos sobre “Controle de Versões”
2. Versionamento remoto e central (cvs, subversion)
• Equipe de desenvolvedores
• É preciso introduzir o
conceito de “merge”
(mesclar texto)
[ProGIT]
8. Conceitos sobre “Controle de Versões”
3. Versionamento distribuído (git, mercurial)
fluxo de trabalho flexível
Mais fácil incorporar contribuições
“externas”
[ProGIT]
9. repositório central: Ex. github,
git.atp.usp.br
(um dos) repo(s) de repo de produção
desenvolvimento (deploy)
$git pull
$git merge
...hack, hack $git pull
$git commit
$git push
14. Workflow GIT: “Replicar código genérico”
Temos N instâncias de um determinado software, cada
uma com algumas customizações. Como atualizar as N
instâncias com código comum a todas?