한 줄 변경으로 복제 시간이 99 % 감소한 방법 %

(Pinterest Engineering) (2020 년 10 월 23 일)

Urvashi Reddy | 소프트웨어 엔지니어, 엔지니어링 생산성 팀
Adam Berry | 기술 책임자, 엔지니어링 생산성 팀
Rui Li | 소프트웨어 엔지니어, 엔지니어링 생산성 팀

Pinterest의 엔지니어링 생산성 팀은 파이프 라인 전체에서 빌드 시간을 줄이는 데 큰 영향을 미치는 작은 변화를 발견했습니다. git fetch 중에 refspec 옵션을 설정하면 복제 단계가 99 % 줄어 들었습니다.

Pinterest의 엔지니어링 생산성 팀은 회사에서 소프트웨어를 빌드하고 배포하는 엔지니어를 지원하는 책임이 있습니다. 우리 팀은 여러 인프라 서비스를 유지하고 종종 대규모 작업을 수행합니다. Pinterest의 모든 소프트웨어를 Bazel로 마이그레이션하고 Hermez 라는 지속적 배포 플랫폼을 만듭니다. 그리고 하루에 수백 번에 헌신하는 모노 레포를 유지합니다.

우리의 모든 더 큰 노력은 Pinterest에서 소프트웨어 개발 및 제공을 빠르게하는 목표를 달성하도록 설계되었습니다. 고통없는 경험. 최근에 우리는 작은 세부 사항이 그 목표에 얼마나 큰 영향을 미칠 수 있는지 상기했습니다. 우리는 지속적 통합 파이프 라인에서 빌드 시간을 크게 줄여주는 간과 된 Git 옵션을 발견했습니다. 이 작은 변경이 얼마나 큰 영향을 미쳤는지 이해하기 위해 모노 레포와 파이프 라인에 대한 약간의 정보를 공유해야합니다.

Monorepos 및 Pipelines

Pinterest에는 Pinboard, Optimus, Cosmos, Magnus, iOS, Android 등 6 개의 주요 저장소가 있습니다. 각각은 단일 저장소이며 다양한 언어 별 서비스 모음을 포함합니다. Pinboard는 회사만큼 오래되었으며 가장 큰 단일 저장소입니다. Pinboard에는 350K 이상의 커밋이 있으며 완전히 복제하면 크기가 20GB입니다.

많은 코드와 기록이있는 monorepo를 복제하는 것은 시간이 많이 걸리며 지속적인 통합을 위해 하루 종일 자주 수행해야합니다. 파이프 라인. Pinboard의 경우에만 영업일에 60K 이상의 git pull을 수행합니다. 대부분의 Jenkins 파이프 라인 구성 스크립트 (Groovy로 작성)는 이후 단계에서 빌드하고 테스트 할 저장소를 복제하는 “Checkout”단계에서 시작합니다. 일반적인 “체크 아웃”단계는 다음과 같습니다.

Git CLI를 직접 사용했다면 다음과 같이 변환됩니다.

“`

우리는 Git에게 얕은 복제를 수행하고 태그를 가져 오지 않고 마지막 50 개 커밋을 가져 오도록 지시하고 있지만 우리가 할 수있는 한 빨리이 작업을 실행하지 않고 있습니다. 이는 refspec 옵션을 설정하지 않았기 때문입니다. 파이프 라인 구성 스크립트에서 설정하지 않으면 Git이 모든 refspec을 가져 오도록 지시합니다 ( + refs / heads / * : refs / remotes / origin / *). Pinboard의 경우 해당 작업은 2,500 개 이상의 브랜치를 가져 오는 것입니다.

refspec 옵션을 추가하고 관심있는 참조를 지정하면됩니다 (master , 우리의 경우), 우리가 관심을 갖는 브랜치에 대한 참조를 제한하고 많은 시간을 절약 할 수 있습니다. 파이프 라인 코드는 다음과 같습니다.

이 간단한 한 줄 변경으로 인해 복제 시간이 99 % 단축되고 그 결과 빌드 시간이 크게 단축되었습니다. 가장 큰 저장소를 복제하는 Pinboard는 40 분에서 30 초로 단축되었습니다. 때때로 우리의 작은 노력이 큰 영향을 미칠 수 있음을 보여줍니다.

학습

대부분의 개발자 생산성 팀과 마찬가지로 우리는 일상적인 경험에 큰 영향을 미치는 대규모 서비스를 작업합니다. 그러나 때로는 큰 차이를 만들 수있는 한 줄 수정이 있습니다. 우리가하는 일은 그것을 이해하는 것입니다.

개발자 생산성 향상에 대한 열정이 있다면 우리 팀에 합류하세요! 엔지니어링 생산성 팀에서 엔지니어링 역할을 맡고 있습니다.

Pinterest 엔지니어링에 대해 자세히 알아 보려면 을 확인하고 Pinterest Labs 사이트. 열려있는 기회를보고 신청하려면 채용 페이지를 방문하세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다