릴리스

상세 정보: Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab에서 릴리스는 프로젝트의 스냅숏을 만들어 사용자에게 제공하며, 설치 패키지와 릴리스 노트를 포함합니다. GitLab에서는 어떤 브랜치에서든 릴리스를 생성할 수 있습니다. 릴리스를 생성하면 소스 코드의 릴리스 지점을 표시하는 Git 태그가 생성됩니다.

경고: 릴리스와 연관된 Git 태그를 삭제할 경우 릴리스도 삭제됩니다.

릴리스에는 다음이 포함될 수 있습니다:

  • 저장소의 소스 코드 스냅숏
  • 작업 아티팩트에서 생성된 일반 패키지
  • 코드의 릴리스 버전과 관련된 메타데이터
  • 릴리스 노트

릴리스를 생성할 때 또는 이후에는 다음을 수행할 수 있습니다:

릴리스 보기

릴리스 목록을 보려면 다음을 수행합니다:

  • 왼쪽 사이드바에서 배포 > 릴리스를 선택하거나

  • 프로젝트 개요 페이지에서 하나 이상의 릴리스가 존재하는 경우, 릴리스 수를 선택합니다.

    릴리스 수

    • 공개 프로젝트의 경우, 모든 사용자가 이 숫자를 볼 수 있습니다.
    • 비공개 프로젝트의 경우, 적어도 보고자 하는 역할을 가진 사용자가 이 숫자를 볼 수 있습니다.

릴리스 정렬

릴리스 날짜 또는 생성 날짜로 릴리스를 정렬하려면 정렬 순서 드롭다운 목록에서 선택합니다. 오름차순 또는 내림차순으로 전환하려면 정렬 순서를 선택합니다.

릴리스 정렬 드롭다운 목록 옵션

최신 릴리스에 대한 영구 링크

최신 릴리스 페이지는 영구적인 URL을 통해 액세스할 수 있습니다. GitLab은 방문 시 최신 릴리스 페이지 URL로 리디렉션합니다.

URL 형식은 다음과 같습니다:

https://gitlab.example.com/namespace/project/-/releases/permalink/latest

우리는 또한 리디렉션된 최신 릴리스에 대한 접미사 경로도 지원합니다. 예를 들어 v14.8.0-ee 릴리스가 최신 릴리스이고 읽기 가능한 링크가 https://gitlab.example.com/namespace/project/-/releases/v14.8.0-ee#release라면 https://gitlab.example.com/namespace/project/-/releases/permalink/latest#release로 주소를 지정할 수 있습니다.

접미사 경로 지속 사용에 대한 자세한 내용은 최신 릴리스 자산에 대한 영구 링크 섹션을 참조하세요.

정렬 기본 설정

기본적으로 GitLab은 released_at 시간을 사용하여 릴리스를 가져옵니다. 쿼리 매개변수 ?order_by=released_at의 사용은 선택 사항이며 ?order_by=semver 지원은 이 이슈에서 추적됩니다.

RSS 피드로 릴리스 추적

GitLab은 프로젝트의 릴리스에 대한 RSS 피드를 Atom 형식으로 제공합니다. 피드를 보려면 다음을 수행하세요:

  1. 멤버인 프로젝트의 경우:
    1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
    2. 배포 > 릴리스를 선택합니다.
  2. 모든 프로젝트의 경우:
    1. 프로젝트 개요 페이지로 이동합니다.
    2. 오른쪽 사이드바에서 릴리스를 선택합니다.
  3. 오른쪽 상단 모서리에서 피드 기호 ()

릴리스 생성

다음 방법으로 릴리스를 생성할 수 있습니다:

릴리스 페이지에서 릴리스 생성

필수 조건:

  • 프로젝트에 대한 최소한의 Developer 역할이 있어야 합니다. 자세한 내용은 릴리스 권한을 참조하세요.

릴리스 페이지에서 릴리스를 생성하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 릴리스를 선택하고 새 릴리스를 선택합니다.
  3. 태그 이름 드롭다운 목록에서 다음 중 하나를 수행하세요:
    • 기존 Git 태그를 선택합니다. 이미 릴리스와 연결되어 있는 기존 태그를 선택하면 유효성 검사 오류가 발생합니다.
    • 새로운 Git 태그 이름을 입력합니다.
      1. 태그 생성 팝오버에서 새로운 태그 생성 시 사용할 브랜치 또는 커밋 SHA를 선택합니다.
      2. 선택 사항입니다. 태그 메시지 설정 텍스트 상자에 주석 달린 태그를 생성할 메시지를 입력합니다.
      3. 저장을 선택합니다.
  4. 선택 사항입니다. 릴리스에 대한 추가 정보를 입력합니다.
  5. 릴리스 생성을 선택합니다.

CI/CD 작업 사용하여 릴리스 생성

GitLab CI/CD 파이프라인의 일부로 직접 릴리스를 생성할 수 있습니다. 이를 위해 작업 정의에서 release 키워드를 사용합니다. 일반적으로 CI/CD 파이프라인에서 릴리스 생성은 마지막 단계 중 하나로 수행됩니다.

작업에서 오류 없이 릴리스가 처리된 경우에만 릴리스가 생성됩니다. 릴리스 생성 중 API에서 오류가 반환되면 릴리스 작업은 실패합니다.

다음 링크에서는 CI/CD 작업을 사용하여 릴리스를 생성하는 일반적인 예제 구성을 확인할 수 있습니다:

사용자 정의 SSL CA 인증서 사용

ADDITIONAL_CA_CERT_BUNDLE CI/CD 변수를 사용하여 사용자 정의 SSL CA 인증서를 구성할 수 있습니다. 이는 release-cli가 HTTPS를 통해 API를 통해 릴리스를 생성할 때 피어를 검증하는 데 사용됩니다. ADDITIONAL_CA_CERT_BUNDLE 값에는 X.509 PEM 공개 키 인증서의 텍스트 표현이나 인증서를 포함하는 경로/파일이 포함되어야 합니다. 예를 들어, .gitlab-ci.yml 파일에서 이 값을 구성하려면 다음을 사용하십시오:

release:
  variables:
    ADDITIONAL_CA_CERT_BUNDLE: |
        -----BEGIN CERTIFICATE-----
        MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
        ...
        jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
        -----END CERTIFICATE-----
  script:
    - echo "릴리스 생성"
  release:
    name: ' 멋진 릴리스'
    tag_name: '$CI_COMMIT_TAG'

ADDITIONAL_CA_CERT_BUNDLE 값은 또한 UI에서 사용자 지정 변수로 구성될 수 있습니다 인증서의 경로를 필요로 하는 file 또는 인증서의 텍스트 표현을 필요로 하는 변수로 구성될 수 있습니다.

단일 파이프라인에서 여러 릴리스 생성

파이프라인은 여러 릴리스 작업을 가질 수 있습니다. 예를들어:

ios-release:
  script:
    - echo "iOS 릴리스 작업"
  release:
    tag_name: v1.0.0-ios
    description: 'iOS 릴리스 v1.0.0'

android-release:
  script:
    - echo "안드로이드 릴리스 작업"
  release:
    tag_name: v1.0.0-android
    description: '안드로이드 릴리스 v1.0.0'

일반 패키지로 릴리스 자산 릴리스

일반 패키지를 사용하여 릴리스 자산을 호스팅할 수 있습니다. 전체 예제는 일반 패키지로 릴리스 자산을 릴리스 프로젝트에서 확인할 수 있습니다.

예정된 릴리스

릴리스 API를 사용하여 사전에 릴리스를 생성할 수 있습니다. 미래의 released_at 날짜를 설정하면 예정된 릴리스 뱃지가 릴리스 태그 옆에 표시됩니다. released_at 날짜와 시간이 지나면 뱃지가 자동으로 제거됩니다.

예정된 릴리스

과거 릴리스

릴리스 API 또는 UI를 사용하여 과거에 릴리스를 생성할 수 있습니다. 과거 released_at 날짜를 설정하면 과거 릴리스 뱃지가 릴리스 태그 옆에 표시됩니다. 과거에 릴리스되었기 때문에 릴리스 증거가 사용할 수 없습니다.

릴리스 편집

생성된 후 릴리스의 세부 정보를 수정하려면 릴리스 API를 사용하거나 UI를 사용할 수 있습니다.

사전 요구 사항:

  • 적어도 개발자 역할이 있어야 합니다.

UI에서:

  1. 왼쪽 사이드바에서 배포 > 릴리스를 선택합니다.
  2. 수정하려는 릴리스의 오른쪽 상단 모서리에 이 릴리스 편집 (연필 아이콘)를 선택합니다.
  3. 릴리스 편집 페이지에서 릴리스의 세부 정보를 수정합니다.
  4. 변경 사항 저장을 선택합니다.

릴리스 삭제

릴리스를 삭제하면 해당 자산이 삭제됩니다. 그러나 연관된 Git 태그는 삭제되지 않습니다. 릴리스와 연결된 Git 태그를 삭제하면 해당 릴리스도 삭제됩니다.

사전 요구 사항:

  • 적어도 개발자 역할이 있어야 합니다. 릴리스 권한에 대해 자세히 알아보세요.

릴리스를 삭제하려면 릴리스 API를 사용하거나 UI를 사용할 수 있습니다.

UI에서:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 릴리스를 선택합니다.
  3. 삭제하려는 릴리스의 오른쪽 상단 모서리에 이 릴리스 편집 (연필 아이콘)를 선택합니다.
  4. 릴리스 편집 페이지에서 삭제를 선택합니다.
  5. 릴리스 삭제를 선택합니다.

릴리스에 마일스톤 연결

하나 이상의 프로젝트 마일스톤에 릴리스를 연결할 수 있습니다.

GitLab Premium 고객은 그룹 마일스톤을 지정할 수 있습니다.

이를 UI에서 수행하거나 릴리스 API로 요청에서 milestones 배열을 포함하여 수행할 수 있습니다.

UI에서 릴리스에 마일스톤을 연결하려면:

  1. 왼쪽 사이드바에서 배포 > 릴리스를 선택합니다.
  2. 수정하려는 릴리스의 오른쪽 상단 모서리에 이 릴리스 편집 (연필 아이콘)를 선택합니다.
  3. 마일스톤 목록에서 연결하려는 각 마일스톤을 선택합니다. 여러 마일스톤을 선택할 수 있습니다.
  4. 변경 사항 저장을 선택합니다.

배포 > 릴리스 페이지에서 마일스톤이 상위 섹션에 나열되며 해당 마일스톤에 대한 이슈에 대한 통계가 표시됩니다.

마일스톤과 연결된 릴리스

릴리스는 또한 계획 > 마일스톤 페이지에서 확인할 수 있으며, 이 페이지에서 마일스톤을 선택할 때 릴리스도 확인할 수 있습니다.

다음은 릴리스가 없는 마일스톤, 하나의 릴리스, 두 개의 릴리스가 있는 마일스톤의 예시입니다.

릴리스 연관된 마일스톤

참고: 하위 그룹의 프로젝트 릴리스는 상위 그룹의 마일스톤과 연결될 수 없습니다. 자세한 내용은 issue #328054, 릴리스는 슈퍼그룹 마일스톤과 연결할 수 없음를 읽어보세요.

릴리스 생성 시 알림받기

프로젝트에 새 릴리스가 생성될 때 이메일로 알림을 받을 수 있습니다.

릴리스 알림을 받으려면 다음 단계를 따르세요.

  1. 왼쪽 사이드바에서 프로젝트 개요를 선택합니다.
  2. 알림 설정(종모양 아이콘)을 선택합니다.
  3. 목록에서 사용자 정의를 선택합니다.
  4. 새 릴리스 확인란을 선택합니다.
  5. 대화 상자를 닫아 변경을 저장합니다.

배포 동결으로 의도하지 않은 릴리스 방지

특정 시간 동안 의도하지 않은 프로덕션 릴리스를 방지하여 배포를 중단합니다. 배포 동결(deploy freeze) 기간을 설정함으로써 자동화된 배포 시 불확실성과 위험을 줄일 수 있습니다.

관리자는 사용자 인터페이스에서 배포 동결 기간을 설정하거나 동결 기간 API를 사용하여 freeze_startfreeze_end를 설정하여 crontab 항목으로 정의할 수 있습니다.

실행 중인 작업이 동결 기간에 있으면 GitLab CI/CD는 $CI_DEPLOY_FREEZE라는 환경 변수를 생성합니다.

프로젝트 그룹 전체의 여러 프로젝트에서 배포 작업을 방지하려면 그룹 전체에서 공유하는 파일에 .freezedeployment 작업을 정의하세요. 프로젝트의 .gitlab-ci.yml 파일에 템플릿을 포함시키려면 includes 키워드를 사용하십시오.

.freezedeployment:
  stage: deploy
  before_script:
    - '[[ ! -z "$CI_DEPLOY_FREEZE" ]] && echo "INFRASTRUCTURE OUTAGE WINDOW" && exit 1; '
  rules:
    - if: '$CI_DEPLOY_FREEZE'
      when: manual
      allow_failure: true
    - when: on_success

배포 작업을 방지하려면 프로젝트의 .gitlab-ci.yml 파일의 deploy_to_production 작업에서 extends 키워드를 사용하여 .freezedeployment 템플릿 작업의 구성을 상속받으십시오.

deploy_to_production:
  extends: .freezedeployment
  script: deploy_to_prod.sh
  environment: production

이 구성은 배포 작업을 조건적으로 차단하고 파이프라인 연속성을 유지합니다. 동결 기간이 정의되면 작업이 실패하여 배포 없이 계속됩니다. 동결 기간 이후에 수동으로 배포할 수 있습니다.

이 접근 방식은 중요한 유지보수 중에 배포를 제어하고 CI/CD 파이프라인의 끊김없는 흐름을 보장합니다.

UI에서 배포 동결 기간을 설정하려면 다음 단계를 완료하세요.

  1. 유지보수자 역할이 있는 사용자로서 GitLab에 로그인합니다.
  2. 왼쪽 사이드바에서 검색 또는 이동하여 이동을 선택하고 프로젝트를 찾습니다.
  3. 설정 > CI/CD를 선택합니다.
  4. 배포 동결로 스크롤합니다.
  5. 배포 동결 테이블을 보려면 확장을 선택합니다.
  6. 배포 동결 모달을 열려면 배포 동결 추가를 선택합니다.
  7. 원하는 배포 동결 기간의 시작 시간, 종료 시간 및 시간대를 입력합니다.
  8. 모달에서 배포 동결 추가를 선택합니다.
  9. 배포 동결이 저장된 후, 편집 버튼()을 선택하여 편집하거나 삭제 버튼()을 선택하여 제거할 수 있습니다.

프로젝트에 여러 동결 기간이 포함되어 있는 경우 모든 기간이 적용됩니다. 겹치는 경우 동결이 전체 중복 기간을 포함합니다.

자세한 내용은 배포 안전성을 참조하십시오.

릴리스 권한

릴리스 보기 및 에셋 다운로드

  • 적어도 리포터(role) 역할을 가진 사용자는 프로젝트 릴리스를 읽고 다운로드할 수 있습니다.
  • 게스트(role) 역할을 가진 사용자는 프로젝트 릴리스를 읽고 다운로드할 수 있습니다. 이는 연결된 Git 태그 이름, 릴리스 설명, 릴리스 작성자 정보를 포함합니다. 그러나 다른 리포지토리 관련 정보인 소스 코드릴리스 증거 등은 삭제되었습니다.

소스 코드 액세스 권한 없이 릴리스 발행

릴리스는 소스 코드를 공개하지 않은 채로 프로젝트 구성원이 아닌 사용자에게도 접근할 수 있습니다. 소스 코드와 릴리스 증거를 비공개로 유지하는 프로젝트에서 릴리스를 사용하여 새 버전의 소프트웨어에 접근 권한을 부여하고자 하는 경우에 사용합니다.

릴리스를 공개적으로 사용할 수 있도록하려면 다음 프로젝트 설정을 설정하십시오.

  • 리포지토리가 활성화되고 프로젝트 구성원 전용으로 설정되어 있습니다.
  • 릴리스가 활성화되고 모든 사용자 접근 가능으로 설정됩니다.

릴리스 및 해당 에셋 생성, 업데이트, 및 삭제

  • 적어도 개발자(role) 역할을 가진 사용자는 프로젝트 릴리스와 해당 에셋에 대한 쓰기 액세스 권한이 있습니다.
  • 릴리스가 보호된 태그와 연관되어 있는 경우, 사용자는 보호된 태그를 만들 수 있는 권한을 가지고 있어야 합니다.

릴리스 권한 제어의 예로, 와일드카드(*)로 태그를 보호하여 릴리스 생성, 업데이트 및 삭제를 유지보수자(role) 역할을 가진 사용자에게만 허용하고자 하는 경우가 있습니다. 이 경우, 허용된 사용자유지보수자를 설정하여 태그를 보호합니다.

릴리스 메트릭

Tier: Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

그룹 수준 릴리스 메트릭그룹 > 분석 > CI/CD로 이동하여 확인할 수 있습니다. 이러한 메트릭에는 다음이 포함됩니다:

  • 그룹 내의 총 릴리스 수
  • 적어도 하나의 릴리스를 보유한 그룹 내 프로젝트의 비율

작업 예제 프로젝트

가이드된 탐색 프로젝트인 GitVersion을 활용한 완전히 자동화된 소프트웨어 및 아티팩트 버전 관리를 통해 다음을 시연합니다:

  • GitLab 릴리스 사용
  • GitLab release-cli 사용
  • 일반적인 패키지 생성
  • 패키지를 릴리스에 연결
  • 복잡한 리포지토리의 버전을 자동으로 결정 및 증가하기 위해 GitVersion이라는 도구 사용

이 예제 프로젝트를 귀하의 그룹이나 인스턴스로 복사하여 테스트할 수 있습니다. GitLab CI 패턴이 어떻게 시연되는지에 대한 자세한 내용은 프로젝트 페이지에서 확인할 수 있습니다.

문제 해결

릴리스 및 해당 자산을 생성, 업데이트 또는 삭제할 때 발생하는 오류

만약 릴리스가 보호된 태그와 관련이 있다면, UI/API 요청이 인가 실패로 이어질 수 있습니다. 그러한 경우에는 다음과 같은 오류가 발생할 수 있습니다:

  • 403 Forbidden
  • 새 릴리스 생성 중에 문제가 발생했습니다

유저나 서비스/봇 계정이 보호된 태그를 생성할 수 있도록 허용되어 있는지 확인하세요.

더 많은 정보를 위해 릴리스 권한을 참조하세요.

저장소에 대한 참고 사항

이 기능은 Git 태그를 기반으로 구축되므로, 릴리스 자체를 생성하는 데 필요한 추가 데이터가 거의 없습니다. 자동으로 생성되는 추가 자산 및 릴리스 증거는 저장소를 사용합니다.