pile·
인프라 / DevOps·핏펫핏펫·

핏펫의 배포시 버저닝 관리 자동화하기

핏펫 커머스 스쿼드가 배포 태그와 릴리즈 노트를 손으로 만들던 것을 GitHub Actions 스크립트로 자동화한 기록이다. 프론트는 날짜 기반, 백엔드는 수동 Semantic Version 이라 일관성이 없었고, 슬랙 공지를 위해 PR 마다 적힌 아사나 링크를 사람이 모아 재구성하던 것을 함께 없앴다.

핵심 포인트
  • 목표 세 가지는 일관성(사용 기술 무관), 자동화(수동 태깅 제거), 공유 용이성(바로 슬랙에 올릴 수 있는 릴리즈 노트)이다.
  • 프론트는 `YYYY-MM-DD-hhmm` 태그를 써서 유니크하지만 사실상 난수라 이전·다음 버전을 짐작할 수 없었다.
  • 백엔드는 Semantic Version 을 손으로 붙이다 보니 버전을 건너뛰는 실수가 났고, 매번 이전 태그를 확인해야 했다.
  • 이미 GitHub Actions 로 배포하고 있었으므로 `actions/github-script` 로 JavaScript 를 실행해 태그 생성과 노트 작성을 함께 처리했다.
  • 스크립트는 별도 저장소로 분리해 여러 repo 가 공통으로, 항상 최신 버전을 쓰게 했다.
상세 정리
  • 문제의 실체: 바쁜 날 배포 때마다 반복되는 클릭과 입력이 스트레스였고, 유관 부서는 PR 링크로 내용을 볼 수 없어 아사나 링크를 따로 모아 공지를 다시 구성해야 했다.
  • 언어 선택: 빠르게 하려면 JavaScript 로 충분하지만 실수를 줄이려고 webpack + TypeScript 로 개발했다. GitHub API 타입을 쓰려고 Octokit 을 설치했다(기능 구현에 필수는 아니었다).
  • 배포 형태: 만든 패키지를 GitHub Registry 에 올려 워크플로에서 npm 으로 설치해 쓴다.
  • `createRelease` 는 두 가지를 한다. `generateNewTagFromLatestRelease` 로 새 태그를 만들고, creator 함수로 GitHub 에 릴리즈 노트를 생성한다.
  • 버전 증가 규칙: 워크플로 input 으로 받은 `upgradeVersionType` 에 따라 major 는 앞자리 증가 후 나머지 0, minor 는 가운데 증가 후 마지막 0, patch 는 마지막 자리만 증가시킨다. 기본값은 patch 다.
  • input 전달: `github-script` 의 `context.payload` 로 워크플로에서 고른 input 을 받는다. 실행 조건은 수동 실행(`workflow_dispatch`)이다.
  • 노트 내용 생성: GitHub 이 자동 생성한 노트의 URL 에서 `pull` 뒤 PR 번호를 뽑아 각 PR 의 제목·번호·아사나 URL 을 가져온다. 아사나 URL 형식이 없으면 "Asana link가 없습니다" 로 채운다.
  • 결과물: 비개발 부서는 아사나 URL 로 배포 내용을, 개발자는 PR 링크로 코드를 확인할 수 있는 릴리즈 노트가 만들어져 슬랙에 그대로 공유된다.
  • 워크플로 job 구성: `create-release` job 안에 npm 설치 → 현재 스크립트 버전 출력 → `github-script` 로 스크립트 실행 3단계를 둔다.
  • 스크립트를 별도 repo 로 둔 이유는 여러 repo 공통 사용과, 프로젝트 안에서 고치면 프로젝트와 무관한 커밋이 쌓이는 문제를 피하기 위해서다.
  • 남은 과제 ①: 버저닝 스크립트에 테스트 코드가 없어 리팩터링이 어렵다. 테스트용 repo 를 만들어 돌려보는 방식은 비효율적이라, 처음부터 테스트를 넣었어야 했다고 회고한다.
  • 남은 과제 ②: git tag 로만 버전을 관리하니 소스코드만 있는 환경에서는 버전을 알 수 없다. GitHub API 로 조회하려면 항상 토큰이 필요해, 프로젝트 안에 버전을 남기는 다른 방법을 고민 중이다.
왜 읽나배포 태그와 릴리즈 노트를 아직 손으로 만들고 있는 팀에게, GitHub Actions 안에서 끝내는 구성과 그 한계를 함께 보여준다.
핏펫
핏펫 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·AWS KoreaAWS Korea Tech·

    엔터프라이즈 보안 요구사항을 충족하는 프라이빗 Amazon Bedrock AgentCore 구축하기

    Amazon Bedrock AgentCore의 VPC egress 기능(2026년 4월 추가)을 활용해 온프레미스 LLM·사내 IdP·사내 MCP 서버에 인터넷 노출 없이 연결하는 방법을 다룬다. 규제 산업 엔터프라이즈가 기존 사내 자산을 그대로 유지하면서 Bedrock AgentCore를 안전하게 구축하기 위한 구성 가이드다.

    요약 이어보기
    #mcp#amazon-bedrock#vpc+2
  2. 인프라 / DevOps·gitlab-engGitLab Blog·

    OpenTofu와 Argo CD로 구성하는 GitLab 기반 AWS 제어 플레인

    GitLab을 단일 제어 플레인으로 삼아 OpenTofu로 AWS 인프라를 프로비저닝하고, Argo CD로 GitOps 기반 애플리케이션 배포까지 자동화하는 엔드투엔드 튜토리얼이다. VPC·EKS 클러스터 구성부터 Helm 기반 툴 설치, 샘플 앱 배포까지 모든 과정이 GitLab CI/CD 파이프라인으로 연결된다.

    요약 이어보기
    #kubernetes#aws-eks#gitops+2
  3. 인프라 / DevOps·AWS KoreaAWS Korea Tech·

    Amazon Bedrock 기반 사내 LLM, 키 발급부터 비용 차단까지: F&F의 LiteLLM 게이트웨이 운영 사례

    패션 기업 F&F가 Amazon Bedrock과 LiteLLM 프록시를 결합해 구축한 사내 LLM 플랫폼 운영 사례다. API 키 셀프서비스 발급, 모델별 접근 승인 워크플로, 사용자·프로젝트별 예산 자동 차단까지 전 과정을 직접 구현한 아키텍처 결정과 운영 교훈을 공유한다.

    요약 이어보기
    #kubernetes#amazon-bedrock#litellm+2