소프트웨어 배포, 얼마나 효율적으로 관리하고 계시나요? 릴리즈(Release)는 단순히 새로운 기능을 추가하고, 버그를 수정해 소프트웨어를 배포하는 데 그치지 않습니다. 사용자에게 변경 사항을 효과적으로 전달하고, 배포 안정성과 효율성을 높이는 일도 중요한 과정이죠. 이에 릴리즈는 종종 복잡하고 번거로운 일로 느껴지기도 합니다.
그러나 GitLab의 강력한 릴리즈 관리 기능을 활용하면 이러한 부담을 크게 덜 수 있습니다. 배포부터 릴리즈 노트 생성까지 손쉽게 자동화할 수 있기 때문입니다. 이 글에서는 GitLab으로 릴리즈 프로세스를 간소화하고, 개발 효율성을 극대화하는 방법을 단계별로 살펴보겠습니다.
릴리즈 관리의 중요성
릴리즈 관리는 소프트웨어 안정성과 품질을 보장하는 핵심 과정입니다. 릴리즈를 잘못 관리하면 사용자에게 혼란을 주고, 긴급히 롤백해야 할 수 있습니다. 그러나 릴리즈를 효과적으로 관리하면 개발팀과 사용자 모두에게 도움이 됩니다. 릴리즈 관리가 필수적인 이유는 크게 세 가지입니다.
- 사용자와 정확한 소통으로 더 큰 유익 제공: 새로운 기능이나 변경 사항, 업그레이드 영향을 명확히 전달하면 사용자가 업데이트된 소프트웨어를 더욱 편리하게 활용할 수 있습니다.
- 버전 관리와 추적성 강화로 만일의 피해 대응: 버전별 변경 사항을 체계적으로 문서화하면, 업그레이드 후 문제가 발생하더라도 이전 버전으로 쉽게 롤백하는 데 도움이 됩니다.
- 개발팀 협업 개선으로 서비스 품질 향상: 팀에서 릴리즈 일정과 마일스톤을 공유하면, 팀원이 같은 목표를 인식해 원활히 협업하고, 서비스 품질도 높일 수 있습니다.
GitLab 릴리즈 관리 특장점
GitLab의 릴리즈 관리 기능을 활용하면 릴리즈를 자동화해 더 안정적이고 효율적으로 운영할 수 있습니다. 특히 배포부터 릴리즈 노트 생성까지 손쉽게 자동화할 수 있죠. GitLab의 릴리즈 관리 기능을 자세히 알아보겠습니다.
GitLab에서 ‘릴리즈’는 Git 태그로 식별하는 코드의 특정 버전입니다. 이는 마지막 릴리즈 이후 변경 사항과 해당 버전의 코드에서 빌드된 모든 관련 아티팩트의 세부 정보를 포함합니다. 세부 정보는 다음과 같습니다.
- 릴리즈 메타데이터: 이름, 버전, 작성자
- 변경 사항 문서화: 새 기능, 버그 수정, 성능 개선
- 릴리즈 아티팩트: 바이너리, Docker 이미지, 문서
GitLab에서는 UI를 사용하거나, Release API를 호출해 릴리즈를 생성할 수 있습니다. 또 CI/CD 파이프라인에서 특정 release
job을 정의해 릴리즈를 자동화할 수 있습니다.
GitLab 릴리즈 관리 기능의 주요 장점은 아래와 같습니다.
- 버전 관리 체계화: 릴리즈 태그로 코드의 특정 버전을 명확하게 식별하고 추적할 수 있습니다.
- 정확한 릴리즈 정보 제공: 릴리즈 노트로 변경 사항을 투명하게 공개하고, 사용자 피드백을 받을 수 있습니다.
- 배포 자동화: CI/CD 파이프라인과 연동해 릴리즈를 자동화하고, 배포 시간을 단축할 수 있습니다.
- 중앙화된 정보 관리: 릴리즈 정보를 한 곳에 관리해 팀원 간에 더 원활히 협업할 수 있습니다.
즉, GitLab을 활용하면 릴리즈 작업을 완료하기 위해 CLI 외부에서 수동으로 처리할 필요가 없습니다. 또 태그 생성이 CI/CD 파이프라인과 연동돼 릴리즈를 더 쉽게 자동화할 수 있습니다.
GitLab 릴리즈 자동화 도구
GitLab에서는 release-cli와 changelog API로 릴리즈 자동화를 구현할 수 있습니다.
1. release-cli
release-cli는 Go로 작성된 커맨드라인 도구로, 작업 토큰과 파라미터가 제공되면 GitLab API로 릴리즈를 생성합니다. .gitlab-ci.yml
파일에서 다음과 같이 사용할 수 있습니다.
release_job:
image: registry.gitlab.com/gitlab-org/release-cli:latest
script:
- gitlab-releaser create --name="Release ${CI_COMMIT_TAG}" --description="Release ${CI_COMMIT_TAG}"
rules:
- if: $CI_COMMIT_TAG
2. changelog API
GitLab의 Changelog API는 Git 커밋 히스토리를 분석해 릴리즈 노트와 변경 로그를 CHANGELOG.md
파일에 자동으로 업데이트합니다. 이를 위해 커밋 메시지에 Changelog 트레일러를 추가해야 합니다.
feat: 새로운 기능 추가
Changelog: added
Changelog 트레일러는 added
, fixed
, changed
, deprecated
, removed
, security
, performance
, other
값을 지원합니다. Changelog API는 이러한 트레일러를 파싱해 구조화된 변경 로그를 생성합니다.
GitLab 릴리즈 자동화 실습
이제 release-cli와 changelog API를 활용해 GitLab에서 릴리즈를 자동화하는 방법을 단계별로 알아보겠습니다. 이번 실습에서는 배포와 릴리즈 노트 생성을 자동화합니다.
0. 사전 준비 사항
릴리즈 자동화를 시작하기 전에 다음 항목을 준비합니다.
- 리포지터리의 Main 브랜치에
CHANGELOG.md
파일 생성 - 최소 하나 이상의 태그 생성 (예:
0.0.0
) - Main 브랜치가 타깃인 Merge Request(MR) 생성
- 리포지터리에서 API 권한이 있는 Access Token 발급
- CI/CD Variables에 CHANGELOG_TOKEN 설정
- Settings > CI/CD > Variables에서 설정
- Key: CHANGELOG_TOKEN
- Value: 발급받은 Access Token
1. 릴리즈 파이프라인 구축
GitLab CI/CD를 활용해 릴리즈 자동화를 위한 파이프라인을 구축합니다. .gitlab-ci.yml
파일에 아래 설정을 추가합니다.
prepare_release:
stage: prepare
image: alpine:latest
rules:
- if: '$CI_COMMIT_TAG =~ /^v?\\d+\\.\\d+\\.\\d+$/'
script:
- apk add curl jq
- 'curl -sS -H "PRIVATE-TOKEN: ${CHANGELOG_TOKEN}" -X POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/repository/changelog?version=$CI_COMMIT_TAG"'
- 'curl -sS -H "PRIVATE-TOKEN: ${CHANGELOG_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/repository/changelog?version=$CI_COMMIT_TAG" | jq -r .notes > release_notes.md'
artifacts:
paths:
- release_notes.md
create_release:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
needs:
- job: prepare_job
artifacts: true
rules:
- if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/'
script:
- echo "Creating release"
release:
name: 'Release $CI_COMMIT_TAG'
description: release_notes.md
tag_name: '$CI_COMMIT_TAG'
ref: '$CI_COMMIT_SHA'
assets:
links:
- name: 'Container Image $CI_COMMIT_TAG'
url: "https://$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA"
이 설정은 다음 작업을 수행합니다.
- 시맨틱 버저닝 태그가 생성되면 설정한 Job이 시작됩니다.
- Changelog API를 호출해 Changelog를 업데이트하고, 릴리즈 노트를 생성합니다.
- release-cli를 사용해 GitLab 릴리즈를 생성합니다.
2. Changelog 트레일러 추가
릴리즈 노트를 체계적으로 관리하기 위해 MR에서 Edit Commit Message를 클릭하고, Changelog 트레일러를 추가합니다. MR의 커밋 메시지에 다음 형식을 각각 추가합니다.
ChangeLog: changed
ChangeLog: removed
MR에서 Changelog 트레일러(changed
,removed
)를 추가한 화면
변경 사항이 Changelog에 반영될 방식을 지정합니다. 트레일러를 추가한 뒤 Merge 버튼을 눌러 변경 사항을 Main 브랜치에 반영합니다.
3. 릴리즈 자동 생성
왼쪽 메뉴 바에서 Code > Tag를 클릭해 시맨틱 버저닝 태그를 생성합니다.

이전에 파이프라인을 설정한 prepare_release와 create_release 작업으로 릴리즈가 자동 생성됩니다. ‘해당 파이프라인이 정상적으로 완료됐는지’ 확인합니다.