gitlab 의 이슈 관리 기능 사용

gitlab 은 github 와 비슷한 꽤 쓸만한 issue management system 을 내장하고 있다. 다른 이슈 관리 시스템처럼 milestone 기능과 커밋시 이슈 상태 변경등도 가능하다.

 

이슈 관리

마일스톤 관리

프로젝트에서 Issues -> Milestones 를 선택하면 등록한 마일스톤 목록 및 마일스톤 등록/수정/삭제가 가능하다. 

마일스톤 등록은 오른쪽의 New Milestone 을 클릭한후에 다음 항목을 설정하면 된다.

  • Title: 마일스톤의 이름을 입력한다. 개인적으로는 프로젝트의 버전을 자주 사용한다.
  • Description: 자세한 설명을 기술한다.
  • Due Date: 마감일을 설정한다.

 

이슈 등록

Issues -> New Issue 를 클릭하면 새로운 이슈를 등록할 수 있다.

 

신규 이슈 작성시 다음 내용을 입력한다. 

  • Subject(필수): 이슈 제목
  • Details : 상세 이슈 설명. gitlab 의 markdown 태그 기능을 사용하여 포맷팅할 수 있다.
  • Assign to: 이슈를 처리할 담당자. assign to me 를 클릭하면 내가 담당자로 지정된다.
  • Milestone: 마일스톤을 등록했다면 이슈를 마일스톤에 연결할 수 있다.
  • Labels: 이슈의 분류 레이블을 입력한다. 여러개의 레이블이 있을 경우 , 를 구분자로 입력한다.

 

커밋과 이슈 연동

gitlab 6.1 부터 커밋과 이슈의 연동이 가능하다. 기본 이슈 클로즈 커밋 메시지 패턴은 정규식으로 '([Cc]lose[sd]|[Ff]ixe[sd]) +#\d+' 이다.

123 번이슈를 해결하는 커밋일 경우 메시지에 "close #123" 또는 "fix #123" 로 입력하면 123번 이슈의 상태가 close 로 변경된다.

커밋 메시지 패턴은 config/gitlab.yml 의 issue_closing_pattern 에 지정할 수 있다.

외부 이슈 관리 시스템과 연동

gitlab은 프로젝트별로 이슈 관리 시스템을 설정할 수 있으며 내장 이슈 관리 기능외에 외부 시스템과 연동을 지원한다. 지원하는 시스템은 redmine 과 JIRA 두 가지이다.

먼저 config/gitlab.yml 의 다음 항목에 redmine 과 JIRA 의 URL 을 설정한후에 gitlab 을 재구동하면 된다.

 issues_tracker:
    jira:
       title: "Atlassian Jira"
       project_url: "https://jira.example.com/issues/?jql=project=:issues_tracker_id"
       issues_url: "https://jira.example.com/browse/:id"
       new_issue_url: "https://jira.example.com/secure/CreateIssue.jspa"
    redmine:
      title: "Redmine"
      project_url: "https://redmine.example.com/projects/:issues_tracker_id"
      issues_url: "https://redmine.example.com/:project_id/:issues_tracker_id/:id"
      new_issue_url: "https://redmine.example.com/projects/:issues_tracker_id/issues/new"

service gitlab restart 로 구동이 완료되었으면 gitlab의 프로젝트의 Settings 를 클릭하면 하단에 Features 탭에 Issue tracker 항목에 추가한 이슈 관리 시스템이 표시가 된다.

여기서 사용할 시스템을 지정해 주면 외부 이슈 관리 시스템을 사용할 수 있다.

 

외부 이슈 관리 시스템으로 변경시 기존 gitlab 의 이슈관리 화면을 더 이상 사용할 수 없다. 기존 UI 에서 REST API 로 외부 시스템과 연계하는게 아니라 링크로 새 창이 열리는 방식으로 구현되어 있기 때문이다.