본문으로 건너뛰기

GitLab 연동하기

본 가이드는 Cremit과 GitLab을 연동하는 방법을 설명합니다.

GitLab Group Access Token 발급

  1. Navigate to the Access Tokens page 그룹 페이지의 좌측 메뉴의 Settings -> Access Tokens 페이지로 진입합니다.

    image.png

  2. 새로운 토큰 발급 Group Access Tokens 페이지에서 우측 상단의 Add new token 버튼을 클릭하여 토큰 발급 페이지로 진입합니다…

    image.png

3. 정보를 입력한 후 생성합니다. 아래의 내용들에 주의하며 입력해주세요.

  • Role은 Developer 이상의 권한이 필요합니다.(기본 설정 기준) 리포지토리의 내용을 읽기 위한 필수적인 권한입니다.
  • read_api Scope는 반드시 허가되어야 합니다. 접근 가능한 프로젝트 목록을 조회하기 위한 필수적인 권한입니다.

image.png

  1. 아래 화면과 같이 액세스 토큰이 발급됩니다.

    image.png

    발급된 토큰은 Cremit과 연동 시 사용됩니다.

크리밋에 연동 하기

  1. Integration 페이지로 가세요.

    좌측 메뉴에 Integration을 클릭합니다.

    image.png

  2. 필수 정보를 입력해주세요.

    Host: Gitlab 인스턴스의 호스트 이름을 입력합니다. Access Token: 이전에 복사해놓은 Private Token을 입력합니다. Label: Integration을 식별할 수 있도록 label을 입력합니다.

    image.png

  3. Submit을 클릭하여 통합을 완료합니다.

그룹에 다수 프로젝트 조회 권한 부여 (선택사항)

만약 특정 그룹에 다수의 프로젝트 조회 권한을 한 번에 부여해야 할 경우, 다음 단계를 따릅니다.

3.1 사용자 액세스 토큰 발급

  1. GitLab에 로그인 후, 사용자 메뉴 → 'Preferences' → 'Access Tokens'로 이동합니다.
    Gitlab 그룹 조회.png
  2. 'Add new token'을 클릭하고, 토큰 이름 입력 및 'api' 스코프 선택 후 토큰을 생성합니다.
  3. 생성된 토큰을 안전하게 보관합니다.

3.2 스크립트 준비 및 실행

  1. Ensure Python and pip are installed.1. Python과 pip가 설치되어 있는지 확인합니다.

  2. requests 모듈을 설치합니다:

    $ pip install requests
  3. 제공된 스크립트를 'invite_group_to_all_visible_repositories.py' 파일로 저장합니다.

    import sys
    import re
    import json
    from requests import post, get

    host = sys.argv[1]
    token = sys.argv[2]
    group_name = sys.argv[3]

    if(host.endswith("/")):
    host = host[:-1]

    headers = {
    "Authorization": f"Bearer {token}"
    }

    def get_groups():
    response = get(f"{host}/api/v4/groups?search={group_name}", headers=headers)
    return response.json()

    groups = get_groups()
    print(json.dumps(groups))

    name_matched_groups = [group for group in groups if group["name"] == group_name]

    if len(name_matched_groups) == 0:
    print(f"couldn't find group that has name {group_name}")
    sys.exit(1)

    group = name_matched_groups[0]
    group_name = group["name"]

    payload = {
    "group_access": 10,
    "group_id": group["id"]
    }

    NEXT_PAGE_PATTERN = re.compile("<(.+)>; rel=\"next\"")
    def get_projects():
    projects = []
    response = get(f"{host}/api/v4/projects?order_by=id&sort=asc", headers=headers)
    projects.extend(response.json())

    if "Link" in response.headers:
    match_result = NEXT_PAGE_PATTERN.search(response.headers["Link"])
    if(match_result):
    next_page_url = match_result[1]
    else:
    next_page_url = None
    else:
    next_page_url = None

    while next_page_url:
    response = get(next_page_url, headers=headers)
    if "Link" in response.headers:
    match_result = NEXT_PAGE_PATTERN.search(response.headers["Link"])
    if(match_result):
    next_page_url = match_result[1]
    else:
    next_page_url = None
    else:
    next_page_url = None
    projects.extend(response.json())

    return projects

    for project in get_projects():
    project_id = project["id"]
    project_name = project["name"]
    share_proejct_endpoint = host + f"/api/v4/projects/{project_id}/share"

    response = post(share_proejct_endpoint, json=payload, headers=headers)
    if response.status_code == 201:
    print(f"proejct {project_name} is shared with group {group_name}")</(.+)>
  4. 다음 명령어로 스크립트를 실행합니다:

    $ python invite_group_to_all_visible_repositories.py {GitLab_호스트} {사용자_액세스_토큰} {초대할_그룹_이름}

3.3 권한 부여 확인

각 프로젝트의 'Manage' → 'Members' → 'Groups' 메뉴에서 그룹이 정상적으로 초대되었는지 확인합니다.

주의사항

  • 모든 액세스 토큰은 기밀 정보이므로 안전하게 관리해야 합니다.
  • 토큰은 승인된 통합 목적으로만 사용해야 합니다.
  • 'read_api' 권한은 접근 가능한 프로젝트 목록을 조회하기 위해 필수적입니다.
  • 그룹에 다수 프로젝트 권한 부여 시, 사용자가 접근 가능한 프로젝트에만 적용됩니다.