보호된 태그
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
각 규칙으로 다음 중 하나를 지정할 수 있습니다: 이 기능은 보호된 브랜치에서 발전한 것입니다. 보호된 태그를 생성하거나 삭제하려면 해당 보호된 태그의 Allowed to create 목록에 포함되어 있어야 합니다. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
보호된 태그는 다음을 제공합니다:
- 태그를 생성할 수 있는 사용자를 제어합니다.
- 생성된 뒤에는 실수로 업데이트되거나 삭제되는 것을 방지합니다.
각 규칙으로 다음 중 하나를 지정할 수 있습니다:
- 개별 태그 이름.
- 여러 태그를 한 번에 제어하는 와일드카드.
이 기능은 보호된 브랜치에서 발전한 것입니다.
보호된 태그를 생성하거나 삭제하려면 해당 보호된 태그의 Allowed to create 목록에 포함되어 있어야 합니다.
보호된 태그 구성#
필수 조건:
- 프로젝트의 Maintainer 또는 Owner 권한이 있어야 합니다.
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Settings > Repository를 선택합니다.
-
Protected tags를 확장합니다.
-
Add new를 선택합니다.
-
태그 하나를 보호하려면 Tag를 선택한 다음 드롭다운 목록에서 태그를 선택합니다.
-
문자열과 일치하는 이름의 태그를 모두 보호하려면:
- Tag를 선택합니다.
- 태그 일치에 사용할 문자열을 입력합니다. 와일드카드(
*)를 지원합니다. - Create wildcard를 선택합니다.
-
Allowed to create에서 보호된 태그를 생성할 수 있는 권한을 선택합니다.
[!note] GitLab Premium과 Ultimate에서는 Allowed to create에 그룹이나 개별 사용자를 추가할 수도 있습니다.
-
Protect를 선택합니다.
보호된 태그(또는 와일드카드)가 Protected tags 목록에 표시됩니다.
보호된 태그에 그룹 추가#
그룹이나 하위 그룹의 구성원이 보호된 태그를 생성할 수 있도록 설정하려면:
-
왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
Settings > Repository를 선택합니다.
-
Protected tags를 확장합니다.
-
다음 필드에 그룹을 추가합니다:
# Allow group members to create protected tags Allowed to create: @group-x
그룹 상속 및 자격#
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Diagram of group inheritance for protected tags
accDescr: If a project is shared with a group, the group members inherit permissions for protected tags.
A[Parent group X] -->|owns| B[Project A]
A -->|contains| C[Subgroup Y]
B -->|shared with| C
C -->|members inherit permissions| B이 예제에서는 다음과 같습니다:
- 상위 그룹 X(
group-x)가 프로젝트 A를 소유합니다. - 상위 그룹 X는 하위 그룹인 하위 그룹 Y도 포함합니다. (
group-x/subgroup-y) - 프로젝트 A는 하위 그룹 Y와 공유됩니다.
보호된 태그 권한을 받을 수 있는 그룹은 다음과 같습니다:
- 프로젝트 A: 프로젝트 A가 하위 그룹 Y와 공유되어 있으므로 그룹 X와 하위 그룹 Y 모두.
그룹과 프로젝트 공유#
그룹이나 하위 그룹의 구성원이 보호된 태그 권한을 받을 수 있도록 프로젝트를 그들과 공유할 수 있습니다.
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph LR
accTitle: Diagram of project sharing for protected tag permissions
accDescr: Sharing a project with a group affects whether their members can have protected tag permissions.
A[Parent group X] -->|owns| B[Project A]
A -->|also contains| C[Subgroup Y]
C -.->D{Share Project A<br/>with Subgroup Y?} -.->|yes| E[Members of Subgroup Y<br/>can have protected<br/>tag permissions]
D{Share Project A<br/>with Subgroup Y?} -.->|no| F[Members of Subgroup Y<br />cannot have protected<br/>tag permissions]
E -.->|Add Subgroup Y<br/> to protected tag settings| I[Subgroup Y members<br/>can create tags] -.-> B
F -.-> |Add Subgroup Y<br/> to protected tag settings| J[Settings will not<br/>take effect] -.-> B프로젝트 A에 대해 하위 그룹 Y 구성원에게 접근을 허용하려면 프로젝트를 그 하위 그룹과 공유해야 합니다. 하위 그룹을 보호된 태그 설정에 직접 추가하는 방식은 효과가 없으며 하위 그룹 구성원에게 적용되지 않습니다.
그룹이 보호된 태그 권한을 가지려면 프로젝트를 그 그룹과 직접 공유해야 합니다. 상위 그룹에서 상속된 프로젝트 멤버십만으로는 보호된 태그 권한을 가질 수 없습니다.
와일드카드 보호 태그#
와일드카드 보호 태그를 지정하면 와일드카드와 일치하는 모든 태그가 보호됩니다. 예를 들면 다음과 같습니다:
| 와일드카드 보호 태그 | 일치하는 태그 |
|---|---|
v* |
v1.0.0, version-9.1 |
*-deploy |
march-deploy, 1.0-deploy |
*gitlab* |
gitlab, gitlab/v1 |
* |
v1.0.1rc2, accidental-tag |
서로 다른 와일드카드 두 개가 같은 태그와 일치할 수 있습니다. 예를 들어
*-stable과 production-*은 모두 production-stable 태그와 일치합니다.
이 경우 이 보호된 태그 중 하나라도 Allowed to create 같은 설정을 가지고 있으면
production-stable도 그 설정을 상속합니다.
보호된 태그의 이름을 선택하면 GitLab 이 일치하는 태그 전체 목록을 표시합니다.
배포 키가 보호된 태그를 생성할 수 있도록 허용#
배포 키가 보호된 태그를 생성하도록 허용할 수 있습니다.
필수 조건:
- 프로젝트에 배포 키가 활성화되어 있어야 합니다. 프로젝트 배포 키는 생성될 때 기본적으로 활성화됩니다. 다만 공개 배포 키는 프로젝트에 대한 접근을 부여받아야 합니다.
- 배포 키에 프로젝트 리포지터리에 대한 쓰기 접근 권한이 있어야 합니다.
- 배포 키의 소유자에게 최소한 프로젝트 읽기 접근 권한이 있어야 합니다.
- 배포 키의 소유자가 프로젝트 구성원이어야 합니다.
배포 키가 보호된 태그를 생성하도록 허용하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
- Protected tags를 확장합니다.
- Tag 드롭다운 목록에서 보호할 태그를 선택합니다.
- Allowed to create 목록에서 배포 키를 선택합니다.
- Protect를 선택합니다.
브랜치 이름으로 태그 생성 방지#
이름이 같은 태그와 브랜치가 서로 다른 커밋을 담을 수 있습니다. 태그와
브랜치가 같은 이름을 쓰면 git checkout 명령을 실행하는 사용자가
브랜치 qa를 체크아웃하려다 태그 qa를 체크아웃할 수
있습니다. 추가 보안 조치로, 브랜치와 같은 이름의 태그는 만들지 않는 것이
좋습니다. 둘을 혼동하면 보안 문제나 운영 문제로
이어질 수 있습니다.
이 문제를 방지하려면:
-
태그 이름으로 쓰이지 않기를 바라는 브랜치 이름을 정리합니다.
-
보호된 태그 구성에 설명된 대로 보호된 태그를 만듭니다:
- Name에는
stable같은 이름을 입력합니다.stable-v1과stable-v2처럼 여러 이름과 일치하도록stable-*같은 와일드카드를 만들 수도 있습니다. - Allowed to Create에서 No one을 선택합니다.
- Protect를 선택합니다.
- Name에는
사용자는 보호된 이름으로 브랜치는 계속 만들 수 있지만 태그는 만들 수 없습니다.
보호된 태그에서 파이프라인 실행#
보호된 태그를 생성하는 권한은 사용자가 다음을 할 수 있는지를 결정합니다:
- CI/CD 파이프라인을 시작하고 실행합니다.
- 해당 태그와 연결된 job에서 작업을 실행합니다.
이 권한으로 승인된 사용자만 보호된 태그의 CI/CD 프로세스를 트리거하고 관리하도록 보장합니다.
태그 보호 해제#
보호 규칙을 제거해 태그의 보호를 해제할 수 있습니다. 이 작업은 태그 자체가 아니라 보호 구성을 제거합니다. 태그는 리포지터리에 남아 있지만 더 이상 보호되지 않습니다.
필수 조건:
- Maintainer 또는 Owner 권한이 있어야 합니다.
태그의 보호를 해제하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
- Protected tags를 확장합니다.
- 제거할 보호된 태그 규칙 옆에서 Unprotect를 선택합니다.
태그 패턴의 보호를 해제하면 Developer, Maintainer, Owner 권한을 가진 모든 사용자가 그 패턴과 일치하는 태그를 삭제할 수 있습니다.
보호된 태그 삭제#
보호 규칙이 적용된 태그도 삭제할 수 있습니다. 이 작업은 보호 규칙이 아니라 리포지터리에서 태그를 제거합니다. 태그를 삭제하지 않고 보호 규칙만 제거하려면 태그 보호 해제를 참고합니다.
필수 조건:
- 해당 태그의 Allowed to create 권한 목록 또는 사용자 목록에 포함되어 있어야 합니다.
- 프로젝트의 Maintainer 또는 Owner 권한이 있어야 합니다.
보호된 태그를 삭제하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Code > Tags를 선택합니다.
- 삭제할 태그 옆에서 Delete([remove])를 선택합니다.
- 확인 대화 상자에서 태그 이름을 입력하고 Yes, delete protected tag를 선택합니다.
보호된 태그는 GitLab의 UI 나 API 로만 삭제할 수 있습니다. 이 보호 장치는 로컬 Git 명령이나 서드파티 Git 클라이언트로 태그를 실수로 삭제하는 일을 막아 줍니다.