Sou desenvolvedor solitário na maior parte do tempo, trabalhando em vários projetos grandes, principalmente baseados em PHP. Quero profissionalizar e automatizar como as alterações na base de código são tratadas e criar um processo de Integração Contínua que possibilite a transição para o trabalho em equipe sem a necessidade de fazer alterações fundamentais.
O que estou fazendo agora é que tenho um ambiente de teste local para cada projeto; Eu uso o SVN para cada projeto; as alterações são testadas localmente e depois transferidas para a versão on-line, geralmente via FTP. A documentação da API é gerada manualmente a partir do código fonte; Os testes de unidade são algo em que estou entrando devagar e ainda não faz parte da minha rotina diária.
O "ciclo de construção" que estou imaginando faria o seguinte:
Um changeset é verificado no SVN após ter sido testado localmente.
Eu inicio o processo de compilação. A revisão SVN HEAD é retirada, modificada se necessário e preparada para o upload.
A documentação da API é gerada automaticamente - se eu ainda não a tiver configurado em detalhes, usando um modelo padrão, verificando toda a base de códigos.
A nova revisão é implantada no local remoto via FTP (incluindo renomeação de diretório, chmodding, importação de bancos de dados e afins). Isso é algo que eu já gosto muito de phing , mas estou aberto a alternativas, é claro.
Os testes de unidade que residem em um local predefinido são executados. Sou informado sobre seu fracasso ou sucesso usando E-Mail, RSS ou (preferencialmente) saída HTML que posso pegar e colocar em uma página da web.
(opcionalmente) um arquivo de texto "changelog" do usuário final em um local predefinido é atualizado com uma parte predefinida da mensagem de confirmação ("Agora é possível filtrar" foo "e" bar "ao mesmo Esta mensagem não é necessariamente idêntica à mensagem de confirmação do SVN, que provavelmente contém muito mais informações internas.
Coisas como métricas de código, verificação de estilo de código e assim por diante não são meu foco principal no momento, mas a longo prazo, certamente o farão. As soluções que trazem esse produto pronto para o uso são muito bem vistas.
Estou à procura de
Feedback e experiências de pessoas que estão ou estavam em uma situação semelhante e implementaram com sucesso uma solução para isso
Especialmente, bons tutoriais passo a passo e orientações sobre como configurar isso
Soluções que fornecem o máximo de automação possível , por exemplo, criando uma API de esqueleto, casos de teste e assim por diante para cada novo projeto.
e também
- Recomendações de produtos . O que eu sei até agora é phing / form para construção, e phpUnderControl ou Hudson para a parte de relatórios. Gosto de todos, até onde posso ver, mas é claro que não tenho experiência detalhada com eles.
Estou inundado de trabalho, por isso tenho uma forte inclinação para soluções simples. Por outro lado, se um recurso estiver faltando, vou chorar por ser muito limitado. :) As soluções de apontar e clicar também são bem-vindas. Também estou com recomendações de produtos comerciais que podem funcionar com projetos PHP.
Minha configuração
Estou trabalhando no Windows localmente (7, para ser exato) e a maioria dos projetos clientes é executada em uma pilha LAMP, geralmente em hospedagem compartilhada (= sem SSH remoto). Estou procurando soluções que possam ser executadas em meu próprio ambiente. Estou pronto para configurar uma VM Linux para isso, não há problema. As soluções hospedadas são interessantes para mim apenas se fornecerem todos os aspectos descritos ou forem suficientemente flexíveis para interagir com as outras partes do processo.
Recompensa Estou aceitando a resposta que sinto que me dará mais quilometragem. Há muitas sugestões excelentes aqui, gostaria de poder aceitar mais de uma resposta. Obrigado a todos!
O termo que você procura é "integração contínua".
Aqui está um exemplo de alguém que usa o GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/
O CruiseControl (que é um servidor de IC) pode usar o Hosted SVN / GIT como fonte. Então você pode até usá-lo com GitHub ou Beanstalk ou qualquer outra coisa.
Em seguida, você pode integrar isso ao seguinte tipo de software:
Você também pode tentar este IC hospedado: http://www.php-ci.net/hosting/create-project
Porém, lembre-se de que essas ferramentas precisam de suporte personalizado se você as integrar.
Você também pensou em gerenciamento de projetos e gerenciamento de patches?
Você pode usar o Redmine para gerenciamento de projetos. Ele integrou o suporte à integração contínua, mas apenas como cliente (não como servidor de CI).
Tente usar um SVN / GIT / etc hospedado. solução, porque eles cobrirão seus backups e manterão os servidores em execução, para que você possa se concentrar no desenvolvimento.
Para um tutorial sobre como configurar o Hudson, consulte: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
fonte
Uso o servidor de integração contínua Bamboo da Atlassian para o meu principal projeto PHP (junto com outros produtos, como olho de peixe (navegação no repositório), jira (rastreador de problemas) e trevo (cobertura de código)).
Ele suporta SVN e agora suporta Git e possui uma ótima interface de usuário. Está disponível para linux, windows e mac e pode ser executado de forma independente em seu próprio servidor tomcat, o que é ótimo para pessoas (como eu) que não gostam de levar dias para configurar suas ferramentas). Embora possa parecer caro, sendo um desenvolvedor solitário, comprei a licença do kit inicial por 10 $ (10 $ por software). Isso é ótimo para equipes pequenas e vale a pena dar uma olhada.
fonte
PHPTesting PHPCI Este é um bom servidor de integração contínua, construído em php.
Além disso, é de código aberto e gratuito. :)
tem número de plugins ..
O PHPCI inclui plugins de integração para:
fonte
Eu sou principalmente um administrador de sistemas, mas às vezes eu codigo PHP também. Como um projeto paralelo, criei alguns scripts que tornarão simples e indolor a configuração de um ambiente completo de CI de PHP usando Jenkins. Ele também executa um projeto de amostra para que você possa ver como cada etapa da construção está configurada.
Se você quiser experimentar, tudo o que precisa é de uma caixa Debian / Ubuntu e acesso ao shell.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Atualizar Para adicionar algum conteúdo à minha resposta:
Você pode simplesmente configurar um CI Jenkins para PHP usando o Ansible. Desde a v1.4, ele suporta funções que você pode baixar do site da comunidade galaxy.ansibleworks.com e fará o trabalho pesado para você. É chamado jenkins-php .
fonte
Eu sugeriria o uso de Jenkins http://jenkins-ci.org/ seja gratuito e de código aberto.
É bastante simples de configurar, funciona em várias plataformas e se integra bem a outras ferramentas de integração contínua como o SonarQube (+ SQUALE) para medir dívidas técnicas e Tucídides para automação de testes.
Eu sugiro usar o GIT ou o GIT Hub para controle de versão em vez do SVN. Do meu ponto de vista, é apenas um sistema de controle de versão melhor que o ajudará a escalar seus esforços de desenvolvimento posteriormente.
Como você trabalha principalmente com o projeto PHP, existem outras ferramentas que você pode usar.
PHPUnit - Para teste de unidade
PHP CodeSniffer - Verifique os padrões de codificação
Dependência do PHP - Mostra suas dependências de código PHP
XDEBUG - Para teste de desempenho
Todas essas ferramentas são acionadas com um trabalho Jenkins e ajudam na qualidade e no desempenho do seu código.
Boa sorte e divirta-se!
fonte
Não uso muitos dos produtos, nem mesmo tipos de produtos que você usa, mas darei a você a minha experiência.
Eu executo um ambiente TEST em paralelo ao meu ambiente PROD. Não tenho testes locais em si. Se for muito difícil colocar tudo em um ambiente de teste real, corrijo meu processo de compilação. Não vejo sentido em testar localmente, pois os ambientes são diferentes. ATUALIZAÇÃO: A única coisa que faço localmente é executar "php -l" antes de carregar qualquer coisa. Pára os erros estúpidos.
O processo de construção funciona com o que estiver no espaço de trabalho atual, que inclui código não confirmado. Esta não é a xícara de chá de todo mundo, mas vou fazer o teste com muita frequência. Tudo é comprometido antes de ir para o PROD.
Parte do meu processo de criação (semelhante ao seu) cria dois arquivos META. Um contém as últimas (normalmente) 100 alterações e também fornece o número da lista de alterações atual. O mostra-me quais alterações estão instaladas. O outro contém o CLIENTSPEC (em termos do Perforce), que me mostra exatamente quais ramificações foram usadas nesta compilação. Juntos, eles me dão construções reproduzíveis.
Eu não construo diretamente no ambiente de destino, mas em uma área de preparação no servidor. Eu uso SSH, então isso faz sentido. Isso me dá algumas vantagens. Mais importante, evita a morte no meio de um grande upload. Também me fornece um local para armazenar arquivos META, e todos os arquivos de compilação são arquivados automaticamente (para que eu possa voltar diretamente para qualquer compilação). O script também registra a atualização (para que haja uma entrada no fluxo de logs e eu possa ver antes e depois) e chuta todos os daemons (eu uso daemontools para "svc -t"). Tudo isso é melhor na máquina de destino.
Uma outra questão são as alterações no banco de dados. Eu mantenho um script mestre do esquema do banco de dados, que eu atualizo toda vez que o esquema é alterado. Cada uma das alterações também entra em um script changes.sql, carregado com a construção na área de preparação. O script é executado como parte do script de instalação.
fonte
Recentemente, iniciei o mesmo tipo de processo e estou usando o Beanstalk para hospedagem svn.
Existem duas características bacanas nas contas pagas (a partir das 15h, acho):
Tenho certeza de que existem outros servidores svn hospedados ou auto-hospedados com esses dois recursos, mas o beanstalk é o que eu tenho experiência e está funcionando muito, muito bem
Há também uma API, que imagino que poderia ser usada para integrar a implantação ainda mais ao seu processo.
fonte
Considere o fazend.com , uma plataforma de CI hospedada gratuita, que automatiza os procedimentos de configuração e instalação. Você não precisa configurar o controle de versão, o rastreamento de bugs, o servidor de CI, o ambiente de teste etc. Tudo é feito sob demanda.
fonte