업계: 소프트웨어 개발

사용한 JetBrains 제품: TeamCity

조직 규모: 200

국가: 미국

Gradle

Gradle Build Tool은 수백만 명의 개발자가 소프트웨어 프로젝트를 빌드, 테스트 및 배포하는 데 사용하는 인기 있는 오픈 소스 빌드 자동화 도구입니다. Gradle은 LinkedIn 및 Netflix를 포함하여 세계 유수의 여러 SaaS 회사에서 운용하는 지속적 전달 파이프라인의 핵심을 이룹니다.

Gradle Build Tool이 TeamCity를 사용하여 하루에 30,000건의 그린 빌드를 실행하는 방법

Gradle Build Tool은 수백만 명의 개발자가 소프트웨어를 빌드, 테스트, 배포하는 데 사용하는 인기 있는 오픈 소스 빌드 자동화 도구입니다. TeamCity는 유연한 워크플로, 공동 작업, 개발 방식을 지원하는 범용 CI/CD 솔루션입니다.

이 사례 연구에서는 Gradle Build Tool이 TeamCity를 사용하여 실패율을 낮게 유지하면서 하루에 수만 건의 빌드를 실행하는 방법을 자세히 살펴봅니다.

“저희는 10년 넘게 TeamCity를 CI 시스템으로 사용해 왔습니다. TeamCity는 필요한 모든 기능을 즉시 제공할 뿐만 아니라 안정성이 뛰어납니다. 빌드 파이프라인 구성에서는 Kotlin DSL의 도움을 많이 받고 있습니다.”

— Piotr Jagielski, Gradle Build Tool 엔지니어링 부사장

Gradle Inc. 정보

Gradle, Inc.는 가장 인기 있는 오픈 소스 빌드 자동화 도구 중 하나인 Gradle Build Tool을 개발한 회사이며 Gradle Enterprise는 개발자 생산성 향상을 위한 선도적 솔루션 플랫폼입니다. 본사가 캘리포니아 샌프란시스코에 소재한 Gradle은 30개국에 약 200명의 직원을 두고, 전 세계 수백만 명의 개발자에게 서비스를 제공하는 오픈 소스 도구와 엔터프라이즈 플랫폼을 구축하고 있습니다.

Gradle에는 Gradle Build Tool과 Gradle Enterprise의 두 가지 주요 코드베이스로 작업하는 100명 이상의 엔지니어가 있습니다. 각각에는 수백만 줄의 코드가 포함되어 있습니다. 이 회사는 두 코드베이스 모두에 TeamCity를 사용하지만 이 사례 연구에서는 Gradle Build Tool 개발에 중점을 둡니다.


Gradle Inc.에서 TeamCity의 가치

지난 10년 동안 Gradle Build Tool 팀은 CI/CD 프로세스에 TeamCity를 사용해 왔습니다. 그 기간 동안 팀은 TeamCity 업데이트를 한 번도 놓치지 않았습니다. 정기적인 업데이트를 통해 팀은 항상 가장 기능이 풍부한 최신 버전의 제품을 이용합니다.


Gradle의 기술 스택

Gradle Build Tool 팀은 Git과 GitHub를 버전 관리 시스템으로 사용합니다. 팀은 Java, Kotlin, Groovy로 코드를 작성합니다. 당연히 팀에서는 자체 제품인 Gradle Build Tool을 빌드 자동화에 사용하고 Gradle Enterprise를 빌드 가속화 및 실패 분석에 사용합니다. 이들은 로컬에서 실행하고 싶지 않은 모든 작업(빌드, 배포, cron 작업, 에이전트 프로비저닝 등)을 실행하기 위한 CI 솔루션으로 TeamCity를 사용합니다.


Gradle의 CI 파이프라인

Gradle Build Tool에는 다양한 운영 체제, Java 버전 및 기타 구성 요소에서 제품이 올바르게 작동하는지 확인하는 포괄적인 테스트 모음이 있습니다. 완전히 '릴리스할 준비가 된' 빌드는 150,000개 이상의 테스트를 거칩니다. 또한 변경 사항이 메인 브랜치에 통합되려면 일련의 성능 기준을 성공적으로 통과해야 합니다. 이를 위해서는 수백 개의 빌드 에이전트가 포함된 복잡한 CI 설정이 필요합니다.

빌드 에이전트 유형

Gradle은 Windows, Linux 및 macOS 빌드 에이전트를 사용합니다. 에이전트의 약 절반이 베어메탈 머신입니다. 팀은 Amazon EC2 스팟 에이전트도 이용하는데, 이를 통해 Gradle은 수요가 높을 때에도 빌드 속도를 유지할 수 있습니다.

TeamCity에 내장된 스팟 인스턴스 지원 덕분에 팀은 에이전트 연결 해제로 어려움을 겪을 필요가 없습니다. 스팟 인스턴스가 사라지면 TeamCity가 자동으로 빌드를 다시 시작합니다.

주요 CI/CD 메트릭

Gradle Build Tool의 TeamCity 설정은 공개적으로 사용 가능하며 누구나 볼 수 있습니다. 기본(마스터) 브랜치는 매우 정교한 체인에 설정된 약 500개의 빌드 구성으로 이루어져 있습니다. Piotr는 다음과 같이 말합니다. “Gradle에서는 빌드 체인을 매우 광범위하게 사용합니다. 사실 없으면 안 되는 존재죠.”

체인의 복잡성으로 인해 Gradle은 파이프라인 구성에 Kotlin DSL을 사용합니다.

Gradle Build Tool 빌드 체인의 일부입니다. 여기에서 정식 버전에 액세스하세요. 게스트로 로그인하여 보실 수 있습니다.
Gradle Build Tool 빌드 체인의 일부입니다. 여기에서 정식 버전에 액세스하세요. 게스트로 로그인하여 보실 수 있습니다.

Gradle에는 클라우드 프로파일을 통해 연결된 스파이크를 관리하기 위한 200개의 고정 빌드 에이전트와 200개의 탄력적 추가 EC2 에이전트가 있습니다. 주당 빌드를 실행하는 데 소요되는 총 시간은 283일(또는 6,792시간)입니다.

동시에 TeamCity는 매달 약 1,636일의 시간을 최적화하고 있습니다. TeamCity는 스마트 알고리즘을 사용하여 동일한 저장소 커밋에서 이미 실행된 다른 빌드가 있는 경우 빌드를 실행하지 않아야 한다는 판단을 내릴 수 있습니다.

Gradle은 빌드 체인을 사용하며, TeamCity는 팀이 빌드를 재사용하여 빌드 시간을 크게 줄이도록 도와줍니다.

사용된 에이전트 수
사용된 에이전트 수

TeamCity는 Prometheus 호환 서버 메트릭을 제공할 수 있기 때문에 팀은 빌드 데이터를 Grafana로 자동으로 내보내어 추가 시각화와 분석에 이용할 수 있습니다. 팀은 대기열에 머무르는 빌드 대기 시간, TeamCity 에이전트 사용량, 대기열 길이, 연결된 에이전트 수 등의 메트릭을 추적합니다.

이를 바탕으로 팀은 사용량이 너무 높아졌을 때 빌드 에이전트를 추가로 구매해야 할지 여부를 결정할 수 있습니다.

Gradle에서 TeamCity 에이전트 사용 현황
Gradle에서 TeamCity 에이전트 사용 현황

피드백 시간 모니터링

가능한 한 빨리 피드백을 제공하는 것은 모든 CI 솔루션의 핵심입니다. Gradle의 개발자 생산성 팀은 피드백 시간을 모니터링하여 풀 리퀘스트를 병합하기까지 엔지니어가 기다려야 하는 시간을 쉽게 파악할 수 있습니다.

Gradle에서 머무르는 빌드의 평균 대기 시간
Gradle에서 머무르는 빌드의 평균 대기 시간

이를 추적하기 위해 Gradle Build Tool 팀은 스냅샷 종속성으로 결합된 여러 빌드의 결과를 집계하여 단일 위치에 표시하는 복합 빌드Trigger 빌드를 모니터링합니다.

피드백 시간은 풀 리퀘스트의 복잡성에 따라 달라집니다. 간단한 PR은 10분 안에 피드백을 받는 반면, 더 복잡한 경우에는 최대 1시간이 걸릴 수도 있습니다. Gradle은 오픈 소스이기 때문에 GitHub 커뮤니티에서 들어오는 모든 풀 리퀘스트는 동일한 빌드 프로세스를 거칩니다.

TeamCity의 Gradle Build Tool 마스터 브랜치 프로젝트
TeamCity의 Gradle Build Tool 마스터 브랜치 프로젝트

빌드 트리거

비용상의 이유로 모든 커밋이 빌드를 트리거하는 것은 아닙니다. 대신, 개발자가 관련 풀 리퀘스트에 댓글을 달아 빌드를 쉽게 트리거할 수 있으며, 봇이 TeamCity API를 호출하여 이를 트리거합니다.

masterrelease와 같은 일부 브랜치는 다르게 처리됩니다. 이러한 브랜치에 푸시가 있으면 TeamCity 빌드가 트리거됩니다.

Kotlin DSL: 게임 체인저

Kotlin DSL은 Gradle 팀이 빌드 종속성의 복잡성을 관리하는 데 큰 도움을 줍니다. 프로젝트 구성을 코드로 저장함으로써 팀은 프로젝트 전체에서 빌드 로직을 효율적으로 복제하고, 여러 구성에 업데이트를 일관되게 적용하며, 파이프라인을 체계적으로 관리할 수 있습니다.

Kotlin DSL의 도움으로 팀은 훨씬 적은 노력으로 빌드 종속성을 생성하고 테스트할 수 있습니다. 팀은 거의 모든 프로젝트에서 웹 UI 편집이 비활성화된 상태로 Kotlin DSL을 사용합니다.


Gradle Build Tool + TeamCity: 최고의 성과

TeamCity는 Gradle의 전체 CI/CD 프로세스를 가속화합니다. TeamCity의 도움으로 Gradle Build Tool은 실패율을 낮게 유지하면서 매일 30,000건의 그린 빌드를 성공적으로 실행합니다.

TeamCity는 풍부한 기능을 가진 덕분에 Gradle 팀의 모든 필요성을 한 번에 충족시킵니다. 이 도구에는 다른 도구에 있는 모든 기능은 물론이고 풍부한 독자적 기능도 포함되어 있습니다.

Kotlin DSL은 Gradle Build Tool의 유연성을 전례 없는 수준으로 높여 팀이 복잡한 빌드 체인을 신속하게 생성하고 테스트할 수 있게 해줍니다. 또한 팀은 Kotlin DSL 구성 파일에 대한 테스트도 실행합니다. Gradle의 TeamCity 구성은 오픈소스이며 GitHub에서 사용할 수 있습니다.

마지막으로, Gradle Build Tool 팀은 TeamCity의 신뢰성에 많은 가치를 둡니다. 팀은 TeamCity의 새 버전이 출시되는 즉시 이를 업그레이드하며 문제가 거의 발생하지 않습니다. TeamCity는 400개 이상의 빌드 에이전트를 관리하지만 지금까지 팀은 연결 문제나 빌드 에이전트 문제를 해결할 필요가 거의 없었습니다.


앞으로의 인프라 확장에 대응

Gradle Build Tool 팀은 팀 규모가 커짐에 따라 인프라를 적절히 확장하기 위해 노력하고 있습니다. 앞으로 팀 규모가 두 배로 늘어나더라도 Gradle은 현재의 피드백 시간을 유지하거나 더 줄이는 것을 목표로 합니다.

Gradle Build Tool 팀은 개발자 생산성 엔지니어링 방식을 전적으로 채택하고, 자동화를 강화하여 사람의 개입을 없애며, 전체 CI/CD 프로세스에 더 많은 빌드 에이전트를 추가하는 등의 노력을 통해 이 야심찬 목표를 달성하려는 계획을 가지고 있습니다.

유사한 고객 후기

Picnic

Ivan Babiankou, Picnic 스태프 소프트웨어 엔지니어

모든 CI 사용 사례를 위한 관리형 솔루션이 필요했습니다. 그 외에 어떤 소프트웨어를 실행하는지, 정확히 어떤 도구가 사용되는지 관리할 자체 호스팅 에이전트도 필요했습니다. 자체 호스팅 에이전트가 포함된 TeamCity Cloud는 300명 이상의 엔지니어로 구성된 팀이 즐겁게 사용하면서 생산성을 한 단계 끌어올리는 맞춤형 솔루션을 제공했습니다.

Gearbox

Phillip Peterson, 선임 릴리스 엔지니어

오랫동안 사내에서 사용하던 제품이 있었습니다. 다른 경쟁사 제품으로 바꾸려고 했지만 어느 것도 효과적이지 못했습니다. 그러던 차에 다른 게임 회사에서 일했던 동료 직원 몇 명이 "저희는 TeamCity라는 걸 사용했거든요"라고 말하더군요. TeamCity가 많은 문제를 해결해준다는 사실을 알게 되었습니다.

Playrix

Yuri Trufanov, 기술 플랫폼 부서 기술 전무이사

저희는 TeamCity Cloud Profiles와 AWS를 포함하는 하이브리드 클라우드 솔루션을 사용하기로 했습니다. 더불어 빌드 에이전트용으로 온프레미스 컴퓨터도 사용했습니다. 이러한 조합으로 하루에 몇 개의 빌드든 수용할 수 있었고, 업무 외 시간에도 기본적인 수의 에이전트를 이용할 수 있었습니다. 그리고 덕분에 원하는 곳에서 원하는 작업을 언제든지 실행할 수 있습니다.

고객 후기 더보기