릴리스

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

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

경고: 릴리스와 연결된 Git 태그를 삭제하면 릴리스도 함께 삭제됩니다.

릴리스에는 다음이 포함될 수 있습니다: - 저장소의 소스 코드 스냅샷 - 작업 결과물에서 생성된 일반 패키지 - 코드의 릴리스 버전과 관련된 기타 메타데이터 - 릴리스 노트

릴리스를 생성하면 또는 이후에 다음을 수행할 수 있습니다: - 릴리스 노트 추가 - 릴리스와 연관된 Git 태그에 메시지 추가 - 마일스톤을 연관시킴 - runbook 또는 패키지와 같은 릴리스 자산을 첨부

릴리스 보기

릴리스 목록을 보려면: - 왼쪽 사이드바에서 Deploy > Releases를 선택하거나 - 프로젝트 개요 페이지에서 한 개 이상의 릴리스가 있는 경우 릴리스 수를 선택합니다.

릴리스 수

  • 공개 프로젝트의 경우, 이 숫자는 모든 사용자에게 표시됩니다.
  • 비공개 프로젝트의 경우, 이 숫자는 적어도 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 파이프라인에서 작업 사용 - 릴리스 페이지에서 릴리스 생성 - 릴리스 API 사용

릴리스를 생성해야 하는 것은 CI/CD 파이프라인의 마지막 단계 중 하나입니다.

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

전제 조건: - 프로젝트에 대해 적어도 Developer 역할이 있어야 합니다. 자세한 내용은 릴리스 권한을 읽어보세요.

릴리스 페이지에서 릴리스를 생성하려면: 1. 왼쪽 사이드바에서 검색 또는 이동하여 프로젝트를 찾습니다. 1. Deploy > Releases를 선택하고 새 릴리스를 선택합니다. 1. 태그 이름 드롭다운 목록에서 다음 중 하나를 선택합니다: - 기존 Git 태그를 선택합니다. 이미 릴리스와 연결된 기존 태그를 선택하면 유효성 검사 오류가 발생합니다. - 새로운 Git 태그 이름을 입력합니다. 1. 태그 생성 팝오버에서 새 태그를 생성할 때 사용할 브랜치 또는 커밋 SHA를 선택합니다. 1. 선택 사항. 태그 메시지 설정 텍스트 상자에 주석이 달린 태그를 만들기 위한 메시지를 입력합니다. 1. 저장을 선택합니다. 1. 릴리스에 대한 추가 정보를 입력합니다(선택 사항): - 제목 - 마일스톤 - 릴리스 노트 - 태그 메시지를 포함할지 여부 - 자산 링크 1. 릴리스 생성을 선택합니다.

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

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

작업이 오류 없이 처리되면 릴리스가 생성됩니다. 릴리스 생성 시 API에서 오류가 발생하면 릴리스 작업이 실패합니다.

CI/CD 작업을 사용하여 릴리스를 생성하는 방법에는 다음이 포함됩니다.

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

release-cli가 HTTPS를 사용하여 API를 통해 릴리스를 작성할 때 피어를 검증하는 데 사용되는 사용자 정의 SSL CA 인증 기관을 구성할 수 있습니다. 이를 위해 ADDITIONAL_CA_CERT_BUNDLE CI/CD 변수를 사용합니다.

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에서 사용자 정의 변수로 구성할 수 있습니다. 이를 위해 파일로 구성하여 인증서 경로를 요구하거나, 텍스트 표현으로 구성하여 인증서를 요구합니다.

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

파이프라인에는 여러 릴리스 작업을 포함할 수 있습니다.

예시:

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

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

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

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

예정된 릴리스

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

예정된 릴리스

과거 릴리스

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

릴리스 편집

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

전제 조건:

  • 최소한 Developer 역할이 있어야 합니다.

UI에서:

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

릴리스 삭제

릴리스를 삭제하면 해당 릴리스의 에셋도 삭제됩니다. 그러나 관련된 Git 태그는 삭제되지 않습니다.

전제 조건:

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

릴리스를 삭제하려면 릴리스 API 삭제 또는 UI를 사용하십시오.

UI에서:

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

릴리스와 마일스톤 연결

릴리스를 프로젝트 마일스톤과 연관시킬 수 있습니다.

GitLab Premium 고객은 그룹 마일스톤을 지정하여 릴리스와 연관시킬 수 있습니다.

사용자 인터페이스나 릴리스 APImilestones 배열을 포함하여 이 작업을 수행할 수 있습니다.

사용자 인터페이스에서 릴리스에 마일스톤을 연결하려면:

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

배포 > 릴리스 페이지에서 마일스톤이 상단에 목록으로 표시되며 해당 마일스톤에 대한 이슈 통계도 함께 표시됩니다.

하나의 연관 마일스톤이 있는 릴리스

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

마일스톤과 연관이 없는 마일스톤, 하나의 릴리스가 있는 마일스톤, 그리고 두 개의 릴리스가 있는 마일스톤의 예가 여기에 있습니다.

릴리스 연관이 있는 마일스톤들

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

릴리스 생성 시 알림 받기

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

릴리스에 대한 알림을 구독하려면:

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

의도하지 않은 릴리스 방지를 위한 배포 중지 설정

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

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

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

여러 프로젝트에서 배포 작업을 방지하려면 그룹 전체에서 공유되는 파일에 .freezedeployment 작업을 정의합니다. 프로젝트의 .gitlab-ci.yml 파일에 .freezedeployment 템플릿을 포함시키기 위해 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 작업에서 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. 배포 동결이 저장된 후 수정하려면 편집 버튼()을 선택하거나 삭제하려면 삭제 버튼()을 선택하십시오. 배포 동결 기간 설정을 위한 배포 동결 모달

프로젝트에 여러 동결 기간이 있는 경우 모든 기간이 적용됩니다. 겹치는 기간이 있으면 해당 동결은 전체 겹치는 기간을 커버합니다.

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

릴리스 권한

  • GitLab 14.1에서 생성, 업데이트 및 삭제 작업에 대한 권한 모델 수정 사항이 도입되었습니다.

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

  • GitLab 14.5에서 ‘Guest’ 역할에 대한 변경 사항이 도입되었습니다.
  • 적어도 ‘Reporter’ 역할을 부여받은 사용자는 프로젝트 릴리스를 읽고 다운로드할 수 있습니다.
  • ‘Guest’ 역할을 부여받은 사용자는 프로젝트 릴리스를 읽고 다운로드할 수 있습니다. 이에는 릴리스의 연결된 Git 태그 이름, 릴리스 설명, 릴리스의 작성자 정보가 포함됩니다. 그러나 소스 코드릴리스 증거와 같은 다른 저장소 관련 정보는 삭제됩니다.

소스 코드 액세스 권한을 부여하지 않고 릴리스 발행

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

릴리스는 저장소 관련 정보인 소스 코드릴리스 증거를 비공개로 유지하면서 프로젝트 멤버가 아닌 사용자에게 액세스할 수 있습니다. 이를 사용하여 소스 코드를 공개하고 싶지 않지만 릴리스를 통해 새 버전의 소프트웨어에 액세스하고 싶은 프로젝트에 사용할 수 있습니다.

릴리스를 공개적으로 사용할 수 있도록 하려면 다음 프로젝트 설정을 설정하세요:

  • 저장소가 활성화되고 프로젝트 멤버만으로 설정되어 있음
  • 릴리스가 활성화되고 모든 사용자에게 액세스 가능으로 설정되어 있음

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

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

릴리스 메트릭

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

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

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

실습용 예제 프로젝트

유도된 Exploration 프로젝트 GitVersion을 활용한 완전 자동화된 소프트웨어 및 아티팩트 버전 관리는 다음을 보여줍니다:

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

테스트를 위해 이 예제 프로젝트를 본인의 그룹이나 인스턴스로 복사할 수 있습니다. 또한 프로젝트 페이지에서 사용된 다른 GitLab CI 패턴에 대한 자세한 내용을 확인할 수 있습니다.

문제 해결

릴리스 및 그에 속한 에셋 생성, 업데이트 또는 삭제 시 403 Forbidden 또는 새 릴리스를 생성하는 동안 문제가 발생했습니다. 오류 수신

만약 릴리스가 보호된 태그와 연관되어 있는 경우, UI/API 요청은 권한 실패로 이어질 수 있습니다. 사용자 또는 서비스/봇 계정이 보호된 태그를 생성할 수 있도록 허용되었는지 확인하세요.

자세한 내용은 릴리스 권한을 참조하세요.

저장소에 관한 참고

이 기능은 Git 태그 위에 구축되었으므로, 릴리스 생성 그 자체와 관련된 추가 데이터가 거의 필요하지 않습니다. 자동으로 생성되는 추가 에셋 및 릴리스 증거가 저장 공간을 차지합니다.