O que você está procurando?
Hero background image

Como implementar um fluxo de trabalho de ramificação de tarefas

Esteja sempre pronto para implantar. Um fluxo de trabalho de ramificação de tarefas usa princípios de DevOps para ajudar as equipes a alcançar velocidade por meio de um fluxo contínuo de mudanças de alta qualidade.
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.
Imagem de ramificação de tarefa

O que é um fluxo de trabalho de ramificação de tarefas?

O padrão é simples: Você cria uma nova ramificação para trabalhar em cada nova tarefa no seu rastreador de problemas. As ramificações de tarefas são mais adequadas para trabalhar com o Unity Version Control porque podem lidar facilmente com milhares de ramificações. Esse fluxo de trabalho não é obrigatório e, em última análise, você deve avaliar qual fluxo de trabalho é melhor para sua organização.

Principais benefícios

Desenvolvimento paralelo

Um fluxo de trabalho de ramificação de tarefas é projetado para facilitar melhor o desenvolvimento paralelo do que abordagens tradicionais, que podem usar apenas uma única ramificação. Com cada tarefa em uma ramificação separada, você está sempre pronto para liberar a partir do principal.

O conteúdo está sempre sob controle

Normalmente, os desenvolvedores têm cuidado ao cometer mudanças, o que pode manter as mudanças fora do controle de versão por muito tempo. Os fluxos de trabalho de ramificação de tarefas permitem check-ins frequentes, para que você sempre possa ver o histórico completo de mudanças dentro do sistema.

Mantenha a ramificação principal limpa

A organização da ramificação principal é um dos objetivos do método de ramificação por tarefa. Controlar cuidadosamente tudo que entra na ramificação principal significa que não há uma maneira fácil de quebrar a construção acidentalmente, uma vez que novos bugs estão isolados em uma ramificação de tarefa.

Principais etapas de um fluxo de trabalho de ramificação de tarefas

No espírito do DevOps, esse fluxo de trabalho pode encurtar os tempos de ciclo de tarefas e colocar novos conteúdos em produção o mais rápido possível. Implantações de software raiz na sua rotina diária.

Imagem de ramificação de tarefa

Tarefa e ramificação de tarefa

O processo começa com uma tarefa no seu rastreador de problemas ou sistema de gerenciamento de projetos: Jira, Bugzilla, Mantis, OnTime ou sua própria solução interna. A chave aqui é que tudo o que você faz deve ter uma tarefa associada. Não importa se faz parte de um novo recurso ou de uma correção de bug - crie uma tarefa para isso.

Em seguida, você cria uma ramificação para essa tarefa.

Recomendamos uma convenção de nomenclatura de ramificação simples: Um prefixo (“tarefa” no exemplo) seguido pelo número da tarefa no rastreador de problemas. Isso ajuda você a manter total rastreabilidade das mudanças.

Imagem de ramificação de tarefa

Desenvolva

Trabalhe na ramificação da tarefa e faça quantos check-ins forem necessários. Explique cada etapa nos comentários para fornecer clareza a qualquer revisor.

Quando a tarefa estiver concluída, defina um atributo de “status” na ramificação como “resolvido.”

Alternativamente, você pode marcá-la como concluída no seu rastreador de problemas. Tudo depende do seu conjunto de ferramentas particular e de como você realmente acabará implementando o fluxo de trabalho.

Imagem de ramificação de tarefa

Revisar

Uma vez que você marque sua tarefa como concluída, ela pode ser revisada por um colega.

Agora é a vez do revisor olhar suas mudanças e ver se consegue identificar bugs, erros ou inconsistências no seu estilo de codificação, ou quaisquer aspectos de design que devem ser alterados. Se sim, a tarefa será reaberta e o ciclo recomeça.

Imagem de ramificação de tarefa

Validar

A validação é uma etapa opcional.

Algumas equipes irão "validar" a tarefa - outro membro da equipe fará um teste exploratório curto para garantir que o novo recurso ou mudança faz sentido. Eles não procuram por bugs (testes automatizados cuidam disso), mas analisam a mudança do ponto de vista do cliente. O status pode ser definido como "validado" no atributo.

Imagem de ramificação de tarefa

Automatizar testes e mesclagens

Configure seu sistema de integração contínua (CI) para monitorar todos os ramos que têm um determinado atributo definido. Um ramo só será considerado pelo sistema de CI quando atingir um determinado status (neste caso, "validado").

Uma vez que a tarefa é revisada/validada, o ramo da tarefa é automaticamente testado antes de ser mesclado ao principal.

Se a suíte de testes passar a mesclagem, ela será confirmada e enviada ao sistema de CI para construir e testar. Esse processo ajuda a evitar quebrar a construção. Se falhar, o processo será reiniciado e você terá que rebasear do principal para resolver quaisquer conflitos.

Imagem de ramificação de tarefa

Implante

Se os testes passarem, a mesclagem é registrada e o ramo agora está pronto para ser entregue. Observe que o status agora está definido como "mesclado".

Se a nova versão estiver pronta para ser implantada, o novo conjunto de mudanças no principal é rotulado como tal e o software é implantado em produção.

Você pode obter uma nova versão após cada nova tarefa passar por esse ciclo, ou pode decidir agrupar algumas. Ao praticar a implantação contínua, implantar cada tarefa em produção é o fluxo de trabalho mais lógico.

Melhores práticas

Imagem de ramificação de tarefa

Configurando a integração contínua

Com o Unity Version Control, a etapa de teste automatizado e mesclagem pode ser configurada usando o plug-in para sua ferramenta de CI escolhida, como Jenkins, Bamboo ou Unity Cloud Build.

Esta etapa também pode ser orquestrada usando o recurso mergebot do Unity Version Control. O mergebot pode mesclar as ramificações e acionar uma construção para garantir que funcione. As mesclagens são confirmadas apenas se a construção estiver boa, evitando construções quebradas.

Imagem de ramificação de tarefa

Melhores práticas para convenções de nomenclatura de ramos

Gostamos de seguir a seguinte convenção de nomenclatura: prefixo + número da tarefa. Por exemplo, as ramificações podem ser nomeadas task1213, task1209 e task1221. O prefixo é "task", e o número representa o número real da tarefa no rastreador de problemas associado.

A captura de tela também mostra uma descrição para cada ramificação junto com o número, uma vez que o explorador de ramificações recupera o número do rastreador de problemas. Você também pode ver a descrição da ramificação selecionando "exibir informações da tarefa da ramificação."

Mantenha os ramos de tarefas curtos

As regras do Scrum afirmam que as tarefas não devem durar mais de 16 horas. Essa prática mantém os cronogramas do projeto sob controle.

As ramificações de tarefas devem ser fechadas rapidamente. Idealmente, você deve ter muitas pequenas tarefas que pode fechar em apenas algumas horas. Essa estrutura ajuda a manter o ritmo do seu projeto e facilita a implantação contínua. Uma tarefa maior que se estende por uma semana, por exemplo, interrompe o ciclo.

Uma bandeira vermelha a ter em mente: Não crie tarefas de "corte de machete". Se você precisar dividir uma tarefa em partes menores, certifique-se de que a tarefa ainda faça sentido isoladamente e possa ser implantada de forma independente.

Imagem de ramificação de tarefa

Fluxo de trabalho e cultura

Os fluxos de trabalho de ramificação de tarefas só podem ter sucesso com o apoio de toda a equipe.

Como qualquer processo de DevOps, há um componente cultural neste fluxo de trabalho. As ramificações de tarefas são sobre comunicar abertamente o progresso e evitar silos. Antes de impor um fluxo de trabalho ou uma maneira particular de trabalhar com tarefas, você precisa buscar alinhamento. Ajude os membros da equipe a entender os benefícios de fechar uma pequena parte de uma tarefa maior hoje, em vez de lutar com tarefas maiores por mais tempo.

Imagem de ramificação de tarefa

Mantenha as ramificações de tarefas independentes

Pergunte a si mesmo (ou a seus colegas de equipe): Você realmente precisa do código que acabou de terminar na tarefa1213 para começar a tarefa1209?

As tarefas tendem a ser muito mais independentes do que você pode pensar. Sim, elas podem estar no mesmo tópico, mas você não precisa tocar exatamente no mesmo código. Você pode simplesmente adicionar algo novo e confiar que a mesclagem fará seu trabalho.

Suponha que 1213 e 1209 no exemplo acima fossem correções de bugs em vez de tarefas. Você não quer que uma dependa da outra. Você quer que elas cheguem ao principal e sejam lançadas o mais rápido possível. Mesmo que toquem o mesmo código, são correções diferentes.

Imagem de ramificação de tarefa

Verifique com os revisores em mente

Cada check-in deve ajudar o revisor a seguir seu raciocínio e processo para entender como você abordou a tarefa.

Deixar detalhes nos comentários do seu check-in ajudará o revisor, pois ele não precisará comparar toda a ramificação. Em vez disso, eles vão comparar as mudanças, uma a uma. E eles estarão seguindo a explicação pré-gravada que você fez para esclarecer cada etapa da tarefa. Eles não se verão olhando para uma lista ousada de mais de 100 arquivos modificados. Em vez disso, eles irão passo a passo.

Imagem de ramificação de tarefa

Tarefas concluídas devem ser implantáveis

Cada ramo de tarefa deve estar pronto para integração assim que finalizado. Se uma mudança for frágil ou fizer o produto se comportar de maneira estranha, então a tarefa não deve ser considerada finalizada.

Este é um pequeno preço a pagar pelos benefícios da automação. A equipe deve alinhar-se na definição de "pronto", significando "pronto para produção". Em troca, você pode desfrutar de tranquilidade sabendo que mover sua tarefa para produção é fácil, totalmente automatizado e não levará a uma correria às 2:00 da manhã.

Alternâncias de recursos

O que são toggles de recurso? Esses são críticos para a implantação contínua. Essa técnica de desenvolvimento de software permite que recursos sejam testados antes de serem concluídos e prontos para lançamento.

Um toggle de recurso pode ocultar, habilitar ou desabilitar o recurso durante a execução. Ele permite que você habilite um recurso apenas para a equipe de desenvolvimento, um pequeno número de primeiros adotantes ou para todos. Por exemplo, um desenvolvedor pode habilitar um recurso para teste e desabilitá-lo para outros usuários durante o desenvolvimento.

Imagem de ramificação de tarefa

Usando alternâncias de recursos

Vamos olhar para um exemplo. Você tem um grande recurso dividido em sete partes que serão convertidas em tarefas e implementadas usando ramos de tarefa. Como é possível implantar a Parte 4 se nada mais estiver pronto?

A Parte 4 pode ser mesclada ao ramo principal e até implantada enquanto ainda está oculta usando um toggle de recurso.

Oculto não significa que o novo código pula os testes antes do lançamento. Quando toda a funcionalidade estiver pronta para ser ativada, as partes individuais já terão sido testadas várias vezes. A integração da última peça não acionará uma mesclagem de grande escala; é apenas uma parte menor passando para o principal.

Mais guias úteis

Imagem de ramificação de tarefa

Melhores práticas para organizar seu projeto Unity

Posicione sua equipe para um desenvolvimento de jogos eficaz com estas dicas úteis sobre como definir padrões para seus projetos Unity.

Imagem de ramificação de tarefa

Melhores práticas para controle de versão

Descubra as melhores práticas para ajudá-lo a aproveitar ao máximo qualquer sistema de controle de versão que você escolher.

Imagem de ramificação de tarefa
Quer saber mais?

Se você achou isso útil, confira outro recurso sobre melhores práticas para organizar seus projetos.

Perguntas frequentes

Quais partes descritas aqui estão incluídas no Controle de Versão do Unity?

+

Com quais sistemas CI o Plastic se integra?

+

Posso conectar meu próprio CI?

+

Preciso de um sistema CI e de um rastreador de problemas?

+

As ramificações de tarefas são obrigatórias no Unity Version Control?

+

Preciso de uma tarefa no Jira para cada tarefa?

+

E se minhas novas funcionalidades forem grandes demais para uma tarefa?

+