Como uma mudança de uma linha diminuiu nossos tempos de clone em 99 %

(Pinterest Engenharia) (23 de outubro de 2020)

Urvashi Reddy | Engenheiro de software, equipe de produtividade de engenharia
Adam Berry | Líder de tecnologia, equipe de produtividade de engenharia
Rui Li | Engenheiro de software, equipe de produtividade de engenharia

A equipe de produtividade de engenharia do Pinterest encontrou uma pequena mudança que teve um grande impacto na redução dos tempos de construção em pipelines. Descobrimos que definir a opção refspec durante git fetch reduziu nossa etapa de clonagem em 99%.

A equipe de produtividade de engenharia no Pinterest é responsável por apoiar os engenheiros que criam e implantam software na empresa. Nossa equipe mantém uma série de serviços de infraestrutura e frequentemente trabalha em esforços de grande escala – migrando todo o software do Pinterest (para o Bazel), criando uma plataforma de entrega contínua chamada Hermez , e manter (os) monorepos que se comprometem a algumas centenas de vezes por dia, para citar alguns.

Todos os nossos esforços maiores são projetados para progredir no objetivo de tornar o desenvolvimento e entrega de software no Pinterest um processo rápido e experiência indolor. Recentemente, fomos lembrados de como pequenos detalhes também podem ter um grande impacto nesse objetivo. Descobrimos uma opção Git negligenciada que reduziu significativamente os tempos de construção em nossos pipelines de integração contínua. Para entender como essa pequena mudança teve um impacto tão grande, precisamos compartilhar algumas informações sobre nossos monorepostos e nossos pipelines.

Monorepos e pipelines

Temos seis repositórios principais no Pinterest: Pinboard, Optimus, Cosmos, Magnus, iOS e Android. Cada um é um monorepo e abriga uma grande coleção de serviços específicos de um idioma. Pinboard é tão antigo quanto a empresa e é o maior monorepo. O Pinboard tem mais de 350 mil commits e 20 GB de tamanho quando totalmente clonado.

A clonagem de monorepos que têm muito código e histórico consome tempo e precisamos fazer isso com frequência ao longo do dia em nossa integração contínua pipelines. Somente para o Pinboard, fazemos mais de 60 mil pulls git em dias úteis. A maioria de nossos scripts de configuração de pipeline do Jenkins (escritos em Groovy) começa com um estágio de “Check-out”, onde clonamos o repositório que os estágios posteriores irão construir e testar. Esta é a aparência de um estágio típico de “Check-out”:

Se estivéssemos usando a CLI Git diretamente, seria traduzido para:

“ `

Mesmo que estejamos dizendo ao Git para fazer um clone superficial, para não buscar nenhuma tag e buscar os últimos 50 commits, nós Ainda não estamos executando essa operação tão rápido quanto poderíamos. Isso ocorre porque não estamos definindo a opção refspec . Observe que, ao não defini-lo no script de configuração do pipeline, estamos dizendo ao Git para buscar todos os refspecs: + refs / heads / *: refs / remotes / origin / *. No caso do Pinboard, essa operação buscaria mais de 2.500 branches.

Simplesmente adicionando a opção refspec e especificando quais refs nos interessam (mestre , no nosso caso), podemos limitar os refs ao branch com o qual nos importamos e economizar muito tempo. Veja como fica em nosso código de pipeline:

Essa mudança simples de uma linha reduziu nossos tempos de clonagem em 99% e, como resultado, reduziu significativamente nossos tempos de construção. Clonando nosso maior repo, o Pinboard passou de 40 minutos para 30 segundos. Isso mostra que às vezes nossos pequenos esforços também podem ter um grande impacto.

Aprendizagem

Como a maioria das equipes de produtividade de desenvolvedor, trabalhamos em grandes serviços que têm um grande impacto em nossa experiência do dia a dia. No entanto, às vezes são as correções de uma linha que podem fazer uma grande diferença. Nosso trabalho é entender isso.

Se você tem paixão por melhorar a produtividade do desenvolvedor, junte-se à nossa equipe! Estamos contratando para funções de engenharia em nossa equipe de produtividade em engenharia.

Para saber mais sobre engenharia no Pinterest, confira nosso e visite nosso site do Pinterest Labs . Para visualizar e se inscrever em oportunidades abertas, visite nossa página Carreiras .

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *