패키지 및 도커 이미지의 버전 형식

패키지

omnibus-gitlab 지속적 통합 파이프라인에서 빌드된 패키지는 <build_version>-<build_iteration> 형식의 버전 문자열을 가지고 있습니다. 일반적으로 파이프라인은 세 가지 타입의 패키지를 생성합니다.

  • 기능 브랜치 빌드
  • 매일 빌드
  • 태그가 지정된 릴리스 빌드

참고: 버전 문자열의 build_iteration 부분은 특정한 의미를 전달하며 build_version이 어떻게 계산되는지에 영향을 줍니다. 다음 섹션들은 이를 염두에 두고 작성되었으며 버전 문자열의 마지막에 온다고 해도 먼저 이해돼야 합니다.

빌드 반복

버전 문자열은 번들된 컴포넌트에 대한 변경이 없는 관련 로직 변경을 패키징할 때 build_iteration을 사용합니다.

릴리스 타입 예시 파이프라인 build_iteration 문자열
태그 없음 기능 브랜치, 매일 빌드 0
태그 지정 릴리스 ce.<OMNIBUS_RELEASE> 또는 ee.<OMNIBUS_RELEASE>

ce 또는 ee 컴포넌트는 패키지 관리자(예: apt 또는 yum)에게 eece보다 사전식으로 정렬되기 때문에, 패키지 버전이 동일한 경우 Enteprise Edition 패키지를 Community Edition의 업그레이드로 취급하도록 지시합니다.

OMNIBUS_RELEASE 컴포넌트는 더 이상 사용되지 않으며 항상 0으로 설정됩니다. 예전에, OMNIBUS_RELEASEomnibus-gitlab에 변경이 없는 빠른 버그 수정을 타겟팅 했음을 나타냈었으며 GitLab Rails 또는 다른 번들된 컴포넌트에 변경 사항이 없는 경우에는 주기적으로 세맨틱 버전 업데이트가 필요했습니다. 이러한 이유로, OMNIBUS_RELEASE는 실제로는 유용하지 않았으며 더 이상 관련이 없습니다.

빌드 버전

패키지가 기능 브랜치, 매일 빌드, 또는 태그가 지정된 릴리스 빌드인지에 따라 버전 문자열의 빌드 버전 부분이 변경됩니다.

일반 기능 브랜치 빌드

일반 기능 브랜치 빌드의 경우 버전 형식은 <latest stable git tag>+rfbranch.<pipeline id>.<omnibus-gitlab SHA>-<build iteration>입니다.

위에서 언급한 대로, 일반 기능 브랜치 빌드의 build iteration0으로 설정됩니다. 이 유형의 예는 13.1.1+rfbranch.159743.eb538eaf-0입니다.

+rfbranch 문자열은 패키지를 일반 기능 브랜치 빌드로부터 생성되었음을 나타냅니다. 또한 안정적인 브랜치 이후로 사전식으로 배치되며, apt 또는 yum과 같은 패키지 관리자들은 이를 안정 릴리스 패키지의 업그레이드로 취급합니다.

매일 빌드

매일 패키지의 경우 버전 형식은 <latest stable git tag>+rnightly.<pipeline id>.<omnibus-gitlab SHA>-<build iteration>입니다.

위에서 언급한 대로, 매일 빌드의 build iteration0으로 설정됩니다. 이 유형의 예는 13.1.1+rnightly.159756.b2b5f05e-0입니다.

+rnightly는 이 패키지가 매일 빌드의 출력임을 나타냅니다. 패키지 관리자들이 알파벳순으로 비교할 때, +rnightly는 최신 안정 버전 뿐만 아니라 +rfbranch 패키지보다 큰 것으로 간주됩니다. 패키지 관리자는 항상 매일 패키지를 패키지 업그레이드로 처리합니다.

태그가 지정된 릴리스 빌드

태그가 지정된 릴리스 빌드의 경우, Git 태그는 <SemVer version>+<build iteration> 형식이지만, 버전 문자열은 <SemVer version>-<build iteration> 형식을 따릅니다.

예를 들어, 태그가 13.1.0+rc42.ce.0, 13.1.0+ce.0, 13.1.0+ee.0인 경우, 버전 문자열은 각각 13.1.0-rc42.ee.0, 13.1.0-ce.0, 13.1.0-ee.0입니다.

위의 예에서 보듯이, 기능 브랜치와 매일 빌드와는 달리, 이 릴리스의 build iteration 컴포넌트는 (ce|ee).0 형식입니다.

Docker 이미지

omnibus-gitlab CI 파이프라인에 의해 생성된 Docker 이미지는 이전 단계에서 빌드된 Ubuntu 패키지를 기반으로 합니다. 따라서 Docker 이미지 태그도 패키지 버전 문자열이 전달한 정보를 반영합니다. 패키지 버전에서 사용된 + 기호는 이미지 태그에서 지원되지 않으므로 이를 슬러그로 바꿉니다.

일반적인 규칙으로 Docker 이미지는 패키지 버전의 슬러그를 태그로 사용합니다. 또한, 모든 Docker 이미지는 해당 이미지가 빌드된 호스트에 해당하는 Docker 컨테이너 레지스트리에 푸시됩니다.

전체 이미지 참조는 다음 양식을 따릅니다.

dev.gitlab.org:5005/gitlab/omnibus-gitlab/gitlab-(ce|ee):<package version의 slug>

예를 들어, dev.gitlab.org:5005/gitlab/omnibus-gitlab/gitlab-ce:13.2.1-rfbranch.163015.32ed1c58-0 는 버전 13.2.1+rfbranch.163015.32ed1c58-0의 GitLab CE 패키지에서 생성된 Docker 이미지 태그입니다.

이 일반적인 규칙에서 벗어나는 특별한 경우는 다음과 같습니다.

QA 미러에서 트리거된 빌드

QA 미러에서 빌드가 트리거된 경우, 트리거된 파이프라인의 일부로 생성된 Docker 이미지들은 트리거가 어디서 시작되었는지에 따라 태그가 결정됩니다. 만약 트리거가 omnibus-gitlab 파이프라인에서 시작된 경우, 이미지 태그는 패키지 버전의 슬러그가 됩니다. 그러나, 트리거가 GitLab 또는 GitLab-FOSS 파이프라인에서 시작된 경우, 이미지 태그는 해당 파이프라인에 해당하는 커밋의 SHA로 설정됩니다.

이러한 작업은 Dockerhub 저장소에 공개되지 않습니다.

매일 빌드

일반적인 명명 규칙에 더하여, 예약된 매일 파이프라인에 의해 생성된 Docker 이미지는 nightly 태그가 붙고 두 태그가 모두 Dockerhub 저장소로 푸시됩니다.

gitlab/gitlab-ee:nightlygitlab/gitlab-ce:nightly는 두 에디션에 대한 이미지 참조를 나타냅니다.

태그가 지정된 릴리스 빌드

일반적인 네이밍 규약에 추가로, 태그가 지정된 릴리스 파이프라인에 의해 빌드된 Docker 이미지는 latest로도 태그가 지정되며, 두 개의 태그가 Dockerhub 레포지토리로 푸시됩니다.