Jira에서 마이그레이션
GitLab v19.4Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
Jira를 사용한다면 다음 중 하나를 선택할 수 있습니다. Jira 가져오기 도구를 사용하면 Jira 이슈를 GitLab으로 가져올 수 있습니다. GitLab 이슈 필드에 공식적으로 매핑되지 않는 그 밖의 Jira 이슈 메타데이터는 GitLab 이슈 설명에 일반 텍스트로 가져옵니다.
Jira를 사용한다면 다음 중 하나를 선택할 수 있습니다.
- Jira에서 마이그레이션하지 않고 GitLab에서 새로 시작합니다. 그런 다음 GitLab 사용의 이점을 최대한 살리도록 프로세스와 워크플로를 설정하는 데 집중할 수 있습니다.
- 여러 선택지 중 하나를 사용하여 Jira에서 GitLab으로 마이그레이션합니다.
| 마이그레이션 방법 | 설명 |
|---|---|
| GitLab Professional Services | GitLab Professional Services가 마이그레이션을 대신 수행하도록 합니다. |
Jira2Lab |
jira2gitlab의 GitLab Professional Services 포크인 Jira2Lab을 사용합니다. |
| 서드파티 스크립트 | 예를 들어 마이그레이션에 jira2gitlab을 사용합니다. |
| Jira 가져오기 도구 | GitLab에 내장된 Jira 가져오기 도구를 사용합니다. |
| CSV 파일 가져오기 | CSV 파일을 사용하여 Jira에서 GitLab으로 데이터를 옮깁니다. |
| 자체 스크립트 | GitLab REST 또는 GraphQL API를 사용하는 스크립트를 직접 작성합니다. |
| 서드파티 서비스 | Unito 및 Getint의 서비스처럼 GitLab과 Jira를 동기화 상태로 유지하는 서드파티 서비스를 사용합니다. |
Jira 가져오기 도구 사용#
Jira 가져오기 도구를 사용하면 Jira 이슈를 GitLab으로 가져올 수 있습니다. 여러 Jira 프로젝트의 이슈를 하나의 GitLab 프로젝트로 가져올 수 있습니다. GitLab은 이슈의 제목, 설명, 레이블을 그대로 가져옵니다. 가져오기를 준비할 때 Jira 사용자를 GitLab 프로젝트 멤버에 매핑할 수도 있습니다.
GitLab 이슈 필드에 공식적으로 매핑되지 않는 그 밖의 Jira 이슈 메타데이터는 GitLab 이슈 설명에 일반 텍스트로 가져옵니다.
Jira 이슈의 텍스트는 GitLab Flavored Markdown으로 파싱되지 않으므로 텍스트 서식이 깨질 수 있습니다. 자세한 내용은 이슈 379104를 참고합니다.
에픽 2738에서는 이슈 담당자, 댓글을 비롯하여 GitLab Jira 가져오기 도구의 개선 사항 추가를 제안하고 있습니다.
사전 요구 사항#
- Jira 이슈에 대한 읽기 액세스 권한, 그리고 가져올 대상 GitLab 프로젝트의 Maintainer 또는 Owner 권한이 필요합니다.
- GitLab Jira 이슈 통합을 구성합니다.
Jira 이슈 가져오기#
Jira 이슈 가져오기는 비동기 백그라운드 job으로 수행되므로 다음 요인에 따라 지연될 수 있습니다.
- 가져오기 큐 부하
- 시스템 부하
- 그 밖의 요인
대규모 프로젝트를 가져올 때는 가져오는 양에 따라 몇 분이 걸릴 수 있습니다.
Jira 이슈를 GitLab 프로젝트로 가져오려면 다음과 같이 진행합니다.
-
[work-items] Work items 페이지에서 Actions (⋮) > Import from Jira를 선택합니다.
-
Import from 드롭다운 목록을 선택하고 이슈를 가져올 Jira 프로젝트를 선택합니다.
Jira-GitLab user mapping template 섹션의 표에는 Jira 사용자가 어떤 GitLab 사용자에 매핑되는지 표시됩니다. 양식이 나타나면 드롭다운 목록은 가져오기를 수행하는 사용자로 기본 설정됩니다.
-
매핑을 변경하려면 GitLab username 칼럼의 드롭다운 목록을 선택하고 각 Jira 사용자에 매핑할 사용자를 선택합니다.
드롭다운 목록에 모든 사용자가 표시되지 않을 수 있으므로, 검색 창으로 이 GitLab 프로젝트의 특정 사용자를 찾습니다.
-
Continue를 선택합니다. 가져오기가 시작되었다는 확인 메시지가 표시됩니다.
가져오기가 백그라운드에서 실행되는 동안 Work items 페이지로 이동하면 목록에 새 이슈(Issue 유형의 작업 항목)가 나타나는 것을 확인할 수 있습니다.
-
가져오기 상태를 확인하려면 Jira 가져오기 페이지로 다시 이동합니다.
CSV 파일 사용#
CSV 파일의 Jira 이슈 데이터를 GitLab 프로젝트로 가져오려면 다음과 같이 진행합니다.
- Jira 데이터를 내보냅니다.
- Jira 인스턴스에 로그인하고 마이그레이션할 프로젝트로 이동합니다.
- 프로젝트 데이터를 CSV 파일로 내보냅니다.
- CSV 파일을 GitLab CSV 가져오기 도구에 필요한 칼럼 이름에 맞게 편집합니다.
title,description,due_date,milestone만 가져옵니다.- 가져오기 과정에서 다른 이슈 메타데이터를 자동으로 설정하려면 설명 필드에 빠른 작업을 추가할 수 있습니다.
- 새 GitLab 그룹과 프로젝트를 만듭니다.
- GitLab 계정에 로그인하고 마이그레이션한 프로젝트를 담을 그룹을 만듭니다.
- 새 그룹에서 마이그레이션한 Jira 이슈를 담을 새 프로젝트를 만듭니다.
- Jira 데이터를 GitLab으로 가져옵니다.
- 새 GitLab 프로젝트의 왼쪽 사이드바에서 Plan > Work items를 선택합니다.
- Actions (⋮) > Import from Jira를 선택합니다.
- 화면의 안내에 따라 가져오기를 완료합니다.
- 마이그레이션 결과를 확인합니다.
- 가져온 이슈를 검토하여 프로젝트가 GitLab으로 정상적으로 마이그레이션되었는지 확인합니다.
- 마이그레이션한 Jira 프로젝트의 기능을 GitLab에서 테스트합니다.
- 워크플로와 설정을 조정합니다.
- 마이그레이션 결과에 만족하면 Jira 인스턴스를 폐기하고 GitLab으로 완전히 전환할 수 있습니다.
직접 스크립트 작성#
마이그레이션 과정을 완전히 제어하려면 요구 사항에 정확히 맞는 방식으로 Jira 이슈를 GitLab으로 마이그레이션하는 스크립트를 직접 작성할 수 있습니다. GitLab은 마이그레이션 자동화를 돕는 API를 제공합니다.
시작하기 전에 다음 GitLab API 엔드포인트를 익혀 둡니다.
스크립트를 작성할 때는 Jira 이슈 필드를 그에 대응하는 GitLab 항목에 매핑해야 합니다.
| Jira 이슈 필드 | 대응 가능한 GitLab 항목 |
|---|---|
| 선택지 수가 고정된 사용자 정의 필드 | 필드 이름을 범위 지정 레이블 키로, 필드 값을 범위 지정 레이블 집합 값으로 하는 범위 지정 레이블 집합을 만듭니다. 예를 들면 input name::value1, input name::value2 입니다. |
| 텍스트 문자열 또는 정수 값을 갖는 사용자 정의 필드 | 사용자 정의 필드 이름과 값을 이슈 설명의 한 섹션에 넣습니다. |
| Status | 상태를 사용합니다. |
| Priority | 우선순위를 범위 지정 레이블 키로, 우선순위 값을 범위 지정 레이블 집합 값으로 하는 범위 지정 레이블을 만듭니다. 예를 들면 priority::1 입니다. |
| Story Point | 이 값을 GitLab 이슈의 weight 값에 매핑합니다. |
| Sprint | 이 값을 GitLab 이슈의 iteration 값에 매핑합니다. 이 값은 아직 완료되지 않았거나 이후 스프린트로 예정된 이슈에만 의미가 있습니다. 데이터를 가져오기 전에 프로젝트의 상위 그룹에 필요한 이터레이션을 만듭니다. |
Atlassian Document Format을 파싱하여 GitLab Flavored Markdown으로 매핑하는 처리도 필요할 수 있습니다. 접근 방법은 여러 가지입니다. 참고할 만한 자료로 예시 커밋을 확인합니다. 이 커밋은 Jira 가져오기 도구를 위해 Atlassian Document Format을 GitLab Flavored Markdown으로 파싱하는 메서드를 추가했습니다.
GitLab을 로컬에서 실행한다면 Rails 콘솔에서 Atlassian Document Format을 GitLab Flavored Markdown으로 직접 변환할 수도 있습니다. 이때는 다음을 실행합니다.
text = <document in Atlassian Document Format>
project = <project that wiki is in> or nil
Banzai.render(text, pipeline: :adf_commonmark, project: project)