피드로 돌아가기
Teamcity - "이제부터 배포요정은 접니다 ✋🏻"
올리브영 테크블로그올리브영 테크블로그
DevOps

Teamcity - "이제부터 배포요정은 접니다 ✋🏻"

올디브가 Jenkins에서 Teamcity로 CI/CD 도구를 전환하여 Docker 컨테이너 환경에서 플러그인 재시작 없이 빌드 파이프라인 운영

2022년 5월 3일9intermediate

Context

Back-end/Front-end 분리 작업 중 기존 Jenkins CI/CD 환경에서 Docker 도입 시 플러그인 설치 때마다 서버 재시작이 필요했고, Docker 컨테이너 실행 중 간헐적 프리징 현상이 발생했습니다. 또한 OnPremise 서버 운영 환경에서 플러그인 설치 시마다 방화벽을 수동으로 뚫어야 하는 운영 부담이 있었습니다.

Technical Solution

  • Jenkins에서 Teamcity로 도구 전환: Jetbrains 제공 CI/CD 도구를 Docker 기반 OnPremise 서버에 도입
  • Docker Network 기반 아키텍처 구성: teamcity라는 이름의 Docker network를 생성하여 Server와 Agent 간 통신 구성
  • Teamcity Server 설치: docker run 명령으로 harbor 내부 레지스트리의 커스터마이징된 이미지 배포, 메모리 할당 2GB 설정 (Xmx2g)
  • Teamcity Agent 다중 배포: Server 인스턴스에 1개 Agent, 별도 Agent 인스턴스에 1개 Agent 구성하여 총 2대 운영 (라이선스 구매 없이 3개 Agent까지 지원)
  • Kotlin Script 기반 빌드 스텝 정의: Back-end 기술 스택 Kotlin과 동일한 언어로 CI/CD 파이프라인 커스터마이징 및 타 시스템 연동
  • Docker-in-Docker 볼륨 마운팅: /var/run/docker.sock을 Agent 컨테이너에 마운트하여 컨테이너 내에서 Docker 이미지 빌드 및 실행

Impact

아티클에서 정량적 수치가 명시되지 않았습니다.

Key Takeaway

Jetbrains Teamcity는 Docker 환경과의 기본 통합 지원으로 플러그인 재시작 없이 빌드 파이프라인을 운영할 수 있으며, Kotlin Script를 활용한 선언적 파이프라인 정의로 프로그래밍 팀이 인프라스트럭처 코드와 동일한 언어로 CI/CD를 관리할 수 있습니다.


Docker 기반의 컨테이너 서비스를 운영하는 조직에서 CI/CD 도구를 선택할 때, Jenkins의 플러그인 재시작 오버헤드가 발생하는 경우 Teamcity로의 전환을 검토하면 플러그인 설치 없이 Docker 서비스를 직접 통합할 수 있습니다. 특히 Back-end 팀의 주 언어와 CI/CD 스크립트 언어를 통일하면 (예: Kotlin) 개발자들의 러닝커브를 줄이고 사내 문서화를 통해 운영 난제를 해결할 수 있습니다.

원문 읽기