소프트웨어 배포, 얼마나 효율적으로 관리하고 계시나요? 릴리즈(Release)는 단순히 새로운 기능을 추가하고, 버그를 수정해 소프트웨어를 배포하는 데 그치지 않습니다. 사용자에게 변경 사항을 효과적으로 전달하고, 배포 안정성과 효율성을 높이는 일도 중요한 과정이죠. 이에 릴리즈는 종종 복잡하고 번거로운 일로 느껴지기도 합니다.

그러나 GitLab의 강력한 릴리즈 관리 기능을 활용하면 이러한 부담을 크게 덜 수 있습니다. 배포부터 릴리즈 노트 생성까지 손쉽게 자동화할 수 있기 때문입니다. 이 글에서는 GitLab으로 릴리즈 프로세스를 간소화하고, 개발 효율성을 극대화하는 방법을 단계별로 살펴보겠습니다.

릴리즈 관리의 중요성

릴리즈 관리는 소프트웨어 안정성과 품질을 보장하는 핵심 과정입니다. 릴리즈를 잘못 관리하면 사용자에게 혼란을 주고, 긴급히 롤백해야 할 수 있습니다. 그러나 릴리즈를 효과적으로 관리하면 개발팀과 사용자 모두에게 도움이 됩니다. 릴리즈 관리가 필수적인 이유는 크게 세 가지입니다.

  1. 사용자와 정확한 소통으로 더 큰 유익 제공: 새로운 기능이나 변경 사항, 업그레이드 영향을 명확히 전달하면 사용자가 업데이트된 소프트웨어를 더욱 편리하게 활용할 수 있습니다.
  2. 버전 관리와 추적성 강화로 만일의 피해 대응: 버전별 변경 사항을 체계적으로 문서화하면, 업그레이드 후 문제가 발생하더라도 이전 버전으로 쉽게 롤백하는 데 도움이 됩니다.
  3. 개발팀 협업 개선으로 서비스 품질 향상: 팀에서 릴리즈 일정과 마일스톤을 공유하면, 팀원이 같은 목표를 인식해 원활히 협업하고, 서비스 품질도 높일 수 있습니다.

GitLab 릴리즈 관리 특장점

GitLab의 릴리즈 관리 기능을 활용하면 릴리즈를 자동화해 더 안정적이고 효율적으로 운영할 수 있습니다. 특히 배포부터 릴리즈 노트 생성까지 손쉽게 자동화할 수 있죠. GitLab의 릴리즈 관리 기능을 자세히 알아보겠습니다.

GitLab에서 ‘릴리즈’는 Git 태그로 식별하는 코드의 특정 버전입니다. 이는 마지막 릴리즈 이후 변경 사항과 해당 버전의 코드에서 빌드된 모든 관련 아티팩트의 세부 정보를 포함합니다. 세부 정보는 다음과 같습니다.

  • 릴리즈 메타데이터: 이름, 버전, 작성자
  • 변경 사항 문서화: 새 기능, 버그 수정, 성능 개선
  • 릴리즈 아티팩트: 바이너리, Docker 이미지, 문서

GitLab에서는 UI를 사용하거나, Release API를 호출해 릴리즈를 생성할 수 있습니다. 또 CI/CD 파이프라인에서 특정 release job을 정의해 릴리즈를 자동화할 수 있습니다.

GitLab 릴리즈 관리 기능의 주요 장점은 아래와 같습니다.

  • 버전 관리 체계화: 릴리즈 태그로 코드의 특정 버전을 명확하게 식별하고 추적할 수 있습니다.
  • 정확한 릴리즈 정보 제공: 릴리즈 노트로 변경 사항을 투명하게 공개하고, 사용자 피드백을 받을 수 있습니다.
  • 배포 자동화: CI/CD 파이프라인과 연동해 릴리즈를 자동화하고, 배포 시간을 단축할 수 있습니다.
  • 중앙화된 정보 관리: 릴리즈 정보를 한 곳에 관리해 팀원 간에 더 원활히 협업할 수 있습니다.

즉, GitLab을 활용하면 릴리즈 작업을 완료하기 위해 CLI 외부에서 수동으로 처리할 필요가 없습니다. 또 태그 생성이 CI/CD 파이프라인과 연동돼 릴리즈를 더 쉽게 자동화할 수 있습니다.

GitLab 릴리즈 자동화 도구

GitLab에서는 release-clichangelog 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. 사전 준비 사항

릴리즈 자동화를 시작하기 전에 다음 항목을 준비합니다.

  1. 리포지터리의 Main 브랜치에 CHANGELOG.md 파일 생성
  2. 최소 하나 이상의 태그 생성 (예: 0.0.0)
  3. Main 브랜치가 타깃인 Merge Request(MR) 생성
  4. 리포지터리에서 API 권한이 있는 Access Token 발급
  5. 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"

이 설정은 다음 작업을 수행합니다.

  1. 시맨틱 버저닝 태그가 생성되면 설정한 Job이 시작됩니다.
  2. Changelog API를 호출해 Changelog를 업데이트하고, 릴리즈 노트를 생성합니다.
  3. release-cli를 사용해 GitLab 릴리즈를 생성합니다.

2. Changelog 트레일러 추가

릴리즈 노트를 체계적으로 관리하기 위해 MR에서 Edit Commit Message를 클릭하고, Changelog 트레일러를 추가합니다. MR의 커밋 메시지에 다음 형식을 각각 추가합니다.

  • ChangeLog: changed
  • ChangeLog: removed
    MR에서 Changelog 트레일러(`changed`, `removed`)를 추가한 화면 | 인포그랩 GitLab
    MR에서 Changelog 트레일러(changed, removed)를 추가한 화면

변경 사항이 Changelog에 반영될 방식을 지정합니다. 트레일러를 추가한 뒤 Merge 버튼을 눌러 변경 사항을 Main 브랜치에 반영합니다.

3. 릴리즈 자동 생성

왼쪽 메뉴 바에서 Code > Tag를 클릭해 시맨틱 버저닝 태그를 생성합니다.

시맨틱 버저닝 태그를 생성하는 화면 | 인포그랩 GitLab
시맨틱 버저닝 태그를 생성하는 화면

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

성공적으로 실행된 파이프라인 결과를 확인하는 화면 | 인포그랩 GitLab
성공적으로 실행된 파이프라인 결과를 확인하는 화면

4. 릴리즈 자동화 결과 확인

릴리즈 파이프라인이 성공적으로 완료되면 다음 결과물을 확인할 수 있습니다.

  1. Main 브랜치의 CHANGELOG.md 파일이 자동으로 업데이트됩니다.

    CHANGELOG.md 파일이 자동 업데이트된 결과 | 인포그랩 GitLab
    CHANGELOG.md 파일이 자동 업데이트된 결과

  2. GitLab 릴리즈 페이지에 새로운 릴리즈가 생성됩니다.

  3. 해당 버전에서 설정한 산출물 목록이 릴리즈에 포함됩니다.

  4. 생성된 릴리즈에 자동으로 생성된 릴리즈 노트가 추가됩니다.

    버전 1.0.5 릴리즈에 포함된 소스 코드, 컨테이너 이미지, 릴리즈 노트 | 인포그랩 GitLab
    버전 1.0.5 릴리즈에 포함된 소스 코드, 컨테이너 이미지, 릴리즈 노트

맺음말

지금까지 GitLab의 릴리즈 관리 기능으로 배포와 릴리즈 노트 생성을 자동화하는 방법을 알아봤습니다. 핵심 내용을 다시 한번 정리해 보겠습니다.

  • 릴리즈 관리의 중요성: 변경 사항을 효과적으로 전달하고, 버전 관리와 추적성을 확보하며, 개발 팀의 협업을 향상합니다.
  • GitLab 릴리즈 관리 기능: 태그, 릴리즈 노트, CI/CD 파이프라인 연동으로 릴리즈를 체계적으로 관리할 수 있습니다.
  • 릴리즈 자동화 도구: release-cli와 Changelog API를 활용해 배포와 릴리즈 노트 생성을 자동화할 수 있습니다.
  • 자동화 구현 방법: 파이프라인 설정, Changelog 트레일러 추가, 태그 생성 등으로 릴리즈 자동화를 구현할 수 있습니다.

GitLab의 릴리즈 관리 기능으로 릴리즈 프로세스를 간소화하고, 소프트웨어를 사용자에게 더 빠르고 안정적으로 제공할 수 있습니다. 이 글에서 소개한 자동화 기법을 활용해 개발 생산성을 한 단계 더 끌어올리세요.

이제 여러분의 프로젝트에서 GitLab 릴리즈 자동화의 효과를 직접 경험할 차례입니다. GitLab의 다양한 기능을 활용해 개발 워크플로를 더욱 효율적으로 개선하시길 응원합니다!

참고 자료

  1. Jackie Meshell, “How GitLab is automating release generation in .gitlab-ci.yml”, GitLab, 2020-05-07, https://about.gitlab.com/blog/2020/05/07/how-gitlab-automates-releases/
  2. Ben Ridley, “Tutorial: Automate releases and release notes with GitLab”, GitLab, 2023-11-01, https://about.gitlab.com/blog/2023/11/01/tutorial-automated-release-and-release-notes-with-gitlab/
  3. Aaron Peters·Member·Good Docs Project, “Pair GitLab and The Good Docs Project template to improve release notes”, GitLab, 2024-01-23, https://about.gitlab.com/blog/2024/01/23/pair-gitlab-and-the-good-docs-project-template-to-improve-release-notes/
  4. “Release CICD Examples”, GitLab, https://docs.gitlab.com/ee/user/project/releases/release_cicd_examples.html
  5. “Changelog entries”, GitLab, https://docs.gitlab.com/ee/development/changelog.html

완벽한 GitLab 구축부터 성공적인 DevOps 도입까지! 인포그랩과 DevOps 라이프사이클을 함께하세요.