패키지 및 Docker 이미지용 버전 형식

패키지

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

  • feature 브랜치 빌드
  • 매일 빌드
  • 태그 릴리스 빌드

참고: 버전 문자열의 build_iteration 부분은 특정 의미를 전달하며 build_version이 계산되는 방식에 기여합니다. 다음 섹션은 build_iteration이 버전 문자열의 맨 뒤에 오긴 하지만 먼저 이해되어야 합니다.

빌드 이터레이션

버전 문자열은 번들된 구성요소에 변경이 없는 패키징 관련 로직 변경 시 build_iteration을 사용합니다.

릴리스 유형 예시 파이프라인 build_iteration 문자열
태그 없는 feature 브랜치, 매일 빌드 0
태그 있는 릴리스 ce.<OMNIBUS_RELEASE> 또는 ee.<OMNIBUS_RELEASE>

ce 또는 ee와 같은 에디션 구성 요소는 apt 또는 yum과 같은 패키지 관리자에게 패키지 버전이 같을 때 엔터프라이즈 에디션 패키지를 커뮤니티 에디션으로 업그레이드 처리하도록 지시합니다. 왜냐하면 eece보다 사전적으로 정렬되기 때문입니다.

OMNIBUS_RELEASE 구성 요소는 사용 중지되었으며 항상 0으로 설정됩니다. OMNIBUS_RELEASE은 최근 엔터프라이즈 에디션 패키지를 커뮤니티 에디션으로 업그레이드하는 빠른 버그 수정을 지시했었습니다. 업데이트는 사용자에 영향을 끼쳐서 빈번히 Semantic Version 업데이트를 필요로 했습니다. 이러한 이유로 OMNIBUS_RELEASE은 실제로 유용하지 않았으며 더 이상 관련이 없습니다.

빌드 버전

버전 문자열의 빌드 버전 구성 요소는 패키지가 feature 브랜치, 매일 빌드 또는 태그 릴리스인지에 따라 변경됩니다.

정규 feature 브랜치 빌드

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

위에서 언급했듯이, 정규 feature 브랜치 빌드의 경우 build iteration0으로 설정됩니다. 이 유형의 예시 버전 문자열은 13.1.1+rfbranch.159743.eb538eaf-0입니다.

+rfbranch 문자열은 패키지가 정규 feature 브랜치 빌드에서 빌드되었음을 나타냅니다. 또한 안정적인 브랜치 이후에 놓여있으므로 패키지 관리자인 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이 됩니다.

위에서 언급한 바와 같이, feature 브랜치 및 매일 빌드와는 달리, 해당 릴리스의 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 미러에서 트리거된 빌드는 다음과 같습니다.

트리거된 파이프라인의 일환으로 생성된 도커 이미지는 트리거가 발생한 위치에 따라 태그가 결정됩니다. omnibus-gitlab 파이프라인에서 트리거가 발생한 경우 이미지 태그는 패키지 버전의 슬러그입니다. 그러나 GitLab 또는 GitLab-FOSS 파이프라인에서 트리거가 발생한 경우 이미지 태그는 해당 파이프라인에 해당하는 커밋의 SHA로 설정됩니다.

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

매일 밤 빌드

일반적인 명명 규칙 외에도, 예약된 매일 밤 파이프라인에서 빌드된 Docker 이미지는 nightly 태그로 태그가 지정되며 이 두 가지 태그는 Dockerhub 저장소에도 푸시됩니다.

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

태그 지정된 릴리스 빌드

일반적인 명명 규칙 외에도, 태그 지정된 릴리스 파이프라인에서 빌드된 Docker 이미지는 latest로도 태그가 지정되며 이 두 가지 태그는 Dockerhub 저장소에도 푸시됩니다.