릴리스

Tier: Free, Premium, Ultimate
Offering: GitLab.com, Self-Managed형, GitLab Dedicated

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

caution
릴리스와 관련된 Git 태그를 삭제하면 릴리스도 함께 삭제됩니다.

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

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

릴리스를 생성하면:

  • GitLab은 자동으로 소스 코드를 아카이브하고 릴리스와 연결합니다.
  • GitLab은 릴리스에 있는 모든 것을 나열하는 JSON 파일을 자동으로 생성하여 릴리스를 비교하고 감사할 수 있게 합니다. 이 파일은 릴리스 증거라고 합니다.

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

릴리스 보기

릴리스 디렉터리을 보려면:

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

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

    릴리스 수

    • 공개 프로젝트의 경우 모든 사용자가 이 번호를 볼 수 있습니다.
    • 비공개 프로젝트의 경우 적어도 Reporter 역할을 가진 사용자에게만 이 번호가 표시됩니다.

릴리스 정렬

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

릴리스 정렬 드롭다운 디렉터리 옵션

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

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

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

https://host/namespace/project/-/releases/permalink/latest

또한 리디렉트에서 최신 릴리스에 대한 접미사 경로를 지원합니다.
예를 들어, v14.8.0-ee가 최신 릴리스이고 가독성 있는 링크 https://host/namespace/project/-/releases/v14.8.0-ee#release를 가지고 있다면, https://host/namespace/project/-/releases/permalink/latest#release로 호출할 수 있습니다.
접미사 경로 이용 방법에 대해 자세히 알아보려면 최신 릴리스 자산에 대한 영구 링크 섹션을 참조하세요.

정렬 기본 설정

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

릴리스 생성

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

릴리스는 CI/CD 파이프라인의 마지막 단계로 하나로 생성해야 합니다.

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

전제 조건:

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

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

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

CI/CD 작업을 통한 릴리스 생성

GitLab CI/CD 파이프라인의 일부로 직접 릴리스를 생성할 수 있습니다. 이를 위해 작업 정의에서 release 키워드를 사용합니다.

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

CI/CD 작업을 사용하여 릴리스를 생성하는 방법은 다음과 같습니다:

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

ADDITIONAL_CA_CERT_BUNDLE CI/CD 변수를 사용하여 사용자 정의 SSL CA 인증 기관을 구성할 수 있습니다. 이는 release-cli가 HTTPS를 사용하여 API를 통해 릴리스를 만들 때 피어를 확인하는 데 사용됩니다. ADDITIONAL_CA_CERT_BUNDLE 값은 text representation of the X.509 PEM public-key certificate 또는 인증서 기관을 포함하고 있는 path/to/file을 포함해야 합니다. 이 값을 .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 릴리스 작업"
  릴리스:
    tag_name: v1.0.0-ios
    description: 'iOS 릴리스 v1.0.0'

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

제네릭 패키지로 릴리스 자산 릴리스

제네릭 패키지를 사용하여 릴리스 자산을 호스팅할 수 있습니다. 완전한 예제는 제네릭 패키지로 릴리스 자산 프로젝트를 참조하세요.

예정된 릴리스

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

예정된 릴리스

과거 릴리스

  • GitLab 15.2에 도입됨(https://gitlab.com/gitlab-org/gitlab/-/issues/199429).

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

릴리스 편집

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

필수 조건:

  • 적어도 개발자 역할을 가져야 합니다.

UI에서:

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

릴리스 삭제

  • GitLab 15.2에 도입됨(https://gitlab.com/gitlab-org/gitlab/-/issues/213862).

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

필수 조건:

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

릴리스를 삭제하려면 릴리스 API 또는 UI를 사용합니다.

UI에서:

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

릴리스에 마일스톤 연결

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

GitLab Premium 고객은 프로젝트 마일스톤을 이용하여 릴리스를 연결할 수 있습니다.

이 작업은 사용자 인터페이스에서 수행하거나 릴리스 API에 대한 요청에 milestones 배열을 포함시켜 수행할 수 있습니다.

UI에서 릴리스에 마일스톤을 연결하는 방법:

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

배포 > 릴리스 페이지에서 마일스톤이 상단 부분에 나열되며 해당 마일스톤의 이슈에 대한 통계도 포함됩니다.

마일스톤과 연관된 릴리스

릴리스는 계획 > 마일스톤 페이지에서도 볼 수 있으며 해당 페이지에서 마일스톤을 선택할 수 있습니다.

이미 마일스톤이 연결된 마일스톤에 대한 릴리스를 확인할 수 있습니다.

릴리스와 연결된 마일스톤

note
하위 그룹의 프로젝트 릴리스는 상위 그룹의 마일스톤과 연결할 수 없습니다. 더 많은 정보는 issue #328054를 참조하세요. 릴리스가 슈퍼그룹 마일스톤과 연결될 수 없음.

릴리스 생성 시 알림 받기

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

릴리스 알림을 받으려면 다음과 같이 수행합니다:

  1. 왼쪽 사이드바에서 프로젝트 개요를 선택합니다.
  2. 알림 설정 (벨 아이콘)을 선택합니다.
  3. 디렉터리에서 사용자 정의를 선택합니다.
  4. 새 릴리스 확인란을 선택합니다.
  5. 저장하려면 대화 상자를 닫습니다.

실수로 릴리스 방지하기: 배포 동결 설정

지정한 시간 동안 의도치 않은 프로덕션 릴리스를 방지하려면 배포 동결 기간을 설정하세요. 배포 동결은 배포를 자동화할 때 불확실성과 위험을 줄이는 데 도움이 됩니다.

관리자는 UI에서 배포 동결 창을 설정하거나 Freeze Periods 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 "인프라 장애 시간" && exit 1; '
  rules:
    - if: '$CI_DEPLOY_FREEZE'
      when: manual
      allow_failure: true
    - when: on_success

배포를 방지하려면 .gitlab-ci.yml 파일의 deploy_to_production 작업에서 부모 그룹에서 공유된 파일에서 .freezedeployment 템플릿 작업의 구성을 상속받기 위해 extends 키워드를 사용합니다.

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. 배포 동결을 저장한 후 편집하려면 편집 버튼({연필})을, 제거하려면 삭제 버튼({제거})을 선택할 수 있습니다. 배포 동결 기간을 설정하는 배포 동결 모달

프로젝트에 여러 동결 기간이 포함된 경우 모든 기간이 적용됩니다. 겹치는 경우 동결이 전체 기간을 커버합니다.

자세한 정보는 배포 안전성 페이지를 참조하세요.

릴리스 권한

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

  • 적어도 리포터 역할을 가진 사용자들은 프로젝트의 릴리스를 읽고 다운로드할 수 있습니다.
  • 게스트 역할을 가진 사용자들은 프로젝트의 릴리스를 읽고 다운로드할 수 있습니다. 이에는 릴리스의 연결된 Git 태그명, 릴리스 설명, 작성자 정보가 포함됩니다. 그러나 소스 코드릴리스 증거와 같은 기타 리포지터리 관련 정보는 삭제됩니다.

소스 코드 액세스 권한 없이 릴리스 배포

  • GitLab 15.6에서 도입되었습니다. 소개됨.

릴리스를 생성하여 소스 코드 및 릴리스 증거와 같은 리포지터리 관련 정보를 외부 프로젝트 구성원에게 공개하지 않을 수 있습니다. 소프트웨어의 새 버전에 대한 액세스를 제공하기 위해 릴리스를 사용하지만 소스 코드를 공개하고 싶지 않은 프로젝트에 사용하세요.

릴리스를 공개적으로 이용하려면 다음의 프로젝트 설정을 설정하세요:

  • 리포지터리가 활성화되어 있고 프로젝트 멤버만으로 설정되어 있습니다.
  • 릴리스가 활성화되어 있고 접근 권한이 있는 모두로 설정되어 있습니다.

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

릴리스 권한 제어의 예로, 와일드카드(*)를 사용하여 태그를 보호하고 MaintainerAllowed to create 열에 설정하여 적어도 Maintainer 역할을 가진 사용자들만 릴리스를 만들고 업데이트 및 삭제할 수 있도록 설정할 수 있습니다.

릴리스 메트릭

Tier: Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
  • GitLab Premium 13.9에서 도입되었습니다. 소개됨.

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

  • 그룹의 총 릴리스 수
  • 적어도 하나의 릴리스가 있는 그룹 프로젝트의 백분율

작업 예제 프로젝트

유도적인 탐구 프로젝트인 Utterly Automated Software and Artifact Versioning with GitVersion는 다음을 보여줍니다:

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

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

문제 해결

릴리스 및 그들의 에셋을 생성, 업데이트 또는 삭제할 때 에러

만약 릴리스가 보호된 태그와 연관되어 있다면, UI/API 요청은 다음과 같은 인가 실패로 결과가 나타날 수 있습니다:

  • 403 금지됨
  • 새 릴리스를 생성하는 중에 문제가 발생했습니다

사용자가 또는 서비스/봇 계정이 보호된 태그를 생성할 수 있도록 허용되었는지 확인하세요.

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

리포지터리에 관한 참고사항

이 기능은 Git 태그 위에 구축되었으므로 릴리스 자체를 만드는 데 필요한 추가 데이터가 거의 필요하지 않습니다. 자동으로 생성되는 추가 에셋과 릴리스 증거가 리포지터리를 소비합니다.