• Ubuntu Precise Pangolin 12.04에서 Test 완료. (2012-05-21)
    (Redmine 1.3.3, Redmine Mylyn Connector Plugin 2.7.6, Eclipse 3.7.2(Indigo), Mylyn 3.6.5, Mylyn Connector-Redmine 0.3.7)
  • Ubuntu Oneiric Ocelot 11.10에서 Test 완료. (2012-03-21)
    (Redmine 1.3.0 & 1.3.2 & 1.3.3, Redmine Mylyn Connector Plugin 2.7.6, Eclipse 3.7.2(Indigo), Mylyn 3.6.5, Mylyn Connector-Redmine 0.3.7)

이번 Post에서는 Ubuntu에서 Redmine Server 구성하기에 이어서 Redmine과 Eclipse의 Mylyn을 연동하여 Task를 관리하는 방법을 알아보도록 하겠습니다.

1. Mylyn?

Mylyn은 Eclipse에서 Task를 관리하기 위한 Plugin입니다. 여기서 말하는 Task(또는 Issue)는 Bug나 New Feature에 대한 요청과 같은 Project 작업의 단위를 말합니다.

Mylyn을 사용하면 개발자가 원하는 Task만을 검색하여 확인하거나 상태를 변경할 수 있으며, 새로운 Task를 작성하거나 삭제하는 등의 Task 관리가 Eclipse 상에서 가능하게 됩니다.

Mylyn를 이용한 Task 관리는 Task(또는 Issue) 관리 System과의 연동을 통해 이루어집니다. Task 관리 System과 연동을 위해서 Connector를 설치해야 하는데, 기본적으로 Mylyn은 Bugzilla, Trac과 같은 잘 알려진 Task 관리 System을 지원합니다.

Mylyn의 더 자세한 내용을 알기 원한다면 devloperWorks의 다음 글들을 참고하기 바랍니다.

2. 설치

Redmine과 Mylyn을 연동하여 사용하기 위해서는 Redmine이 설치된 Server와 Mylyn을 사용하는 Eclipse에 각각 필요한 Plugin을 설치해야 합니다.

이번 항목에서는 설치방법을 설명합니다.

2.1. Redmine Plugin 설치

Redmine Server에서는 먼저 Mylyn과 연동을 위한 Plugin을 설치해야 합니다. Terminal에서 다음과 같이 입력합니다.

1
2
3
4
$ sudo apt-get install git ruby-git
$ cd /usr/share/redmine
$ sudo ruby script/plugin install --force git://redmin-mylyncon.git.sourceforge.net/gitroot/redmin-mylyncon/redmine-mylyn-connector
$ sudo service apache2 restart
Redmine - Plugins

Redmine - Plugins

Redmine에 admin 계정으로 접속한 다음, 관리 -> 플러그인을 Click하면 위와 같이 Mylyn Connector plugin이 설치된 것을 확인할 수 있습니다.

Redmine - Settings

Redmine - Settings

Mylyn과 연동을 위해 REST Interface를 사용하기 때문에 관리 -> 설정 -> 인증에서 REST 웹서비스 활성화에 Check하고 저장을 누르면 Server 설정이 끝나게 됩니다.

2.2. Eclipse Plugin 설치

Eclipse에서는 당연히 Mylyn Plugin이 설치되어 있어야 합니다. Eclipse의 All-in-one Pack(C/C++ Developers, Java Developers etc.)을 사용한다면 Mylyn이 Default로 포함되어 있습니다.

만약 Mylyn이 설치되어 있지 않다면 다음과 같은 방법으로 설치할 수 있습니다.

2.2.1. Mylyn 설치
Eclipse - Install New Software

Eclipse - Install New Software

Eclipse에서 Help -> Install New Software를 Click합니다.

Eclipse - Available Software (Mylyn)

Eclipse - Available Software (Mylyn)

Work With에 Indigo(Eclipse의 Version에 따라 다를 수 있음)를 선택한 다음, 검색창에 mylyn을 입력하면 Mylyn과 연관된 Plugin들이 표시될 것입니다. (List를 가져오는데 시간이 좀 걸릴 수 있습니다.) 이중에서 다음과 같은 Plugin을 Check한 다음, Next를 눌러 설치하면 됩니다.

  • Mylyn Context Connector: Eclipse IDE
  • Mylyn Context Connector: Java Development, C/C++ Development (Optional)
  • Mylyn Context Connector: Team Support
  • Mylyn Task List
  • Mylyn Task-Forced Interface
2.2.2. Redmine-Mylyn Connector 설치

Mylyn Plugin을 설치했다면 이제 Redmine과 Mylyn을 연동하기 위한 Connector를 설치해야 합니다. 설치하는 방법은 다음과 같습니다.

Eclipse - Preferences

Eclipse - Preferences

먼저 Software Site를 추가하기 위해서 Window -> Preferences를 Click합니다.

Eclipse - Available Software Sites

Eclipse - Available Software Sites

Install/Update -> Available Software Sites에서 Add Button을 누릅니다.

Eclipse - Add Site

Eclipse - Add Site

Add Dialog에서 다음과 같이 입력하고 OK를 누릅니다.

  • Name: Redmine-Mylyn Connector
  • Location: http://redmin-mylyncon.sourceforge.net/update-site/N/
Eclipse - Available Software (Mylyn Redmine Connector)

Eclipse - Available Software (Mylyn Redmine Connector)

그 다음 Help -> Install New Software를 Click한 후, Work with에 Redmine-Mylyn Connector를 선택합니다. 그리고 List에 표시되는 Mylyn Integration을 Check하고 Next를 눌러 설치하면 Eclipse 설정이 완료됩니다.

Eclipse - Security Warning

Eclipse - Security Warning

만약 설치 도중에 위와 같은 Security Warning이 표시된다면, OK를 눌러 계속 진행하면 됩니다.

3. Redmine과 Mylyn 연동

이제 Server와 Eclipse 모두 준비가 되었으니 연동을 해 봅시다. 아래의 항목들을 순서대로 진행하면 됩니다.

3.1. Task Repository 추가하기

Redmine과 Mylyn을 연동하기 위해서는 먼저 Task Repositories View에 Redmine Server를 추가해야 합니다.

Eclipse - Show View

Eclipse - Show View

Eclipse에서 Window -> Show View -> Other를 Click합니다.

Eclipse - Show View (Other)

Eclipse - Show View (Other)

Mylyn의 Task Repositories를 Click하고 OK를 누릅니다.

Eclipse - Task Repositories

Eclipse - Task Repositories

Task Repositories View가 표시되면 오른쪽의 Add Task Repository Button을 Click합니다.

Eclipse - Add Task Repository

Eclipse - Add Task Repository

Dialog에서 Redmine을 선택한 다음 Next를 누릅니다.

Eclipse - Redmine Repository Settings

Eclipse - Redmine Repository Settings

Redmine Repository Settings Dialog가 표시되면 다음과 같은 항목을 입력합니다.

  • Server: Redmine Server에 접근하기 위한 URL을 입력합니다. URL 앞에 Protocol(http)까지 제대로 입력해야 합니다.
  • Label: Task Repositories View에 표시될 이름을 입력합니다.
  • API-Key: Redmine ID와 Password입력을 사용하여 인증하는 것 대신 API Key를 통해서 인증하는 것이 더 안전합니다. 오른쪽의 Enable을 Check한 다음, API Key를 입력합니다. API-Key를 얻는 방법은 바로 다음에 설명합니다.
  • Task Editor Settings: Textile을 Check하면 Redmine의 Wiki 문법을 Comment나 Description에 사용할 수 있습니다.

입력 후에는 아래의 Vailidate Settings를 Click하여 설정을 Check합니다. 제대로 인증되었다면 Finish를 누르면 됩니다.

Redmine

Redmine

인증을 위한 API-Key를 얻으려면 먼저 Mylyn으로 접근하기 위한 계정으로 Redmine에 Login한 다음, 오른쪽 위의 내 계정을 Click합니다.

Redmine - My Account

Redmine - My Account

오른쪽의 API 접근키의 보기를 누른다음, 표시된 Key를 복사하여 Redmine Repository Settings Dialog의 API-Key에 입력하면 됩니다.

Eclipse - Add New Query

Eclipse - Add New Query

Redmine Repository가 추가되면 위와 같이 Query를 추가할 지 물어보는데, 다음 항목에서 설명할 것이므로 여기서는 No를 누릅니다.

Eclipse - Update Repository Configuration

Eclipse - Update Repository Configuration

추가가 완료되면 Redmine의 정보를 Load하기 위해서 Redmine Repository에서 Mouse 오른쪽 Popup을 띄운 후, Update Repository Configuration을 Click합니다.

만약 Redmine의 설정이 변경되었거나 Redmine-Mylyn Connector가 Update되었다면, Update Repository Configuration과 Synchronize All Tasks를 Click하여 설정이 변경된 내용을 적용하고 동기화 시켜야 합니다.

3.2. Query 추가하기

Task Repository가 추가되면 이제 Eclipse에서 Redmine의 Task를 관리할 준비가 된 것입니다. 이제 Query를 추가하여 개발자가 원하는 Task만을 검색하여 관리해 봅시다.

Redmine - Issues

Redmine - Issues

Redmine의 Hello Project에 위와 같은 Task가 있는 경우를 예로 들어 보겠습니다.

Eclipse - Show View

Eclipse - Show View

Task를 확인하기 위한 Task List View를 표시하기 위해서, 먼저 Eclipse에서 Window -> Show View -> Other를 Click합니다.

Eclipse - Show View (Other)

Eclipse - Show View (Other)

Mylyn -> Task List를 Click하고 OK를 누릅니다.

Eclipse - Task List

Eclipse - Task List

Task List View가 표시되면 Query를 추가하기 위해서 Task List View의 New Task Button 옆 역삼각형을 Click한 다음, New Query를 Click합니다.

Eclipse - New Query

Eclipse - New Query

Select a repository에서 Redmine을 선택한 다음 Next를 누릅니다.

Eclipse - Select a predefined query

Eclipse - Select a predefined query

Combobox에서 Create a new query를 선택한 다음 Next를 누릅니다.

Eclipse - Create a new query

Eclipse - Create a new query

새로 생성할 Query를 설정하는 화면에서 원하는 Task를 검색하기 위한 Query를 만들 수 있습니다.

Query Title에는 Task List View에 표시될 Query의 이름을 입력하면 됩니다. 그 외에 나머지는 Redmine의 Task를 생성할 때 입력하는 항목과 동일하니 따로 설명하지는 않겠습니다. 위의 그림은 Hello Project의 신규로 설정된, 그리고 자신에게 배속된 Task를 검색하는 Query를 설정한 것입니다.

만약 Redmine의 내용이 Query 설정에 제대로 표시되지 않는다면 아래의 Update Attributes from Repository를 눌러 Redmine의 설정을 가져오면 됩니다.

Eclipse - Created Query

Eclipse - Created Query

Query 생성 Dialog에서 Finish를 눌러 생성이 완료되었다면 위의 그림과 같이 Query로 검색된 Task의 List가 Task List View에 표시됩니다. 그리고 Task를 Double-Click하면 Task의 내용을 확인하거나 변경할 수 있습니다.

3.3. Task 추가하기

Eclipse - New Task

Eclipse - New Task

Eclipse에서 Task를 Redmine에 새로 추가하기 위해서는 Task List View의 Add Task를 Click합니다.

Eclipse - Select a repository

Eclipse - Select a repository

Task Repository 중 Redmine을 선택한 다음 Finish를 누릅니다.

Eclipse - Task

Eclipse - Task

새로운 Task 편집 Tab에서 Task의 각 항목을 입력하고 Submit Button을 누르면 Redmine에 Task가 추가됩니다.

3.3.1. Task 추가시 Error가 발생할 경우
Eclipse - Problem Occurred

Eclipse - Problem Occurred

Task를 작성한 다음 Submit을 눌렀을 때, 위와 같이 자세한 내용이 없는 Server Error가 발생할 수 있습니다.

Redmine Server에서 Redmine의 Log File인 /var/log/redmine/defaults/production.log를 확인하면 다음과 같은 Error가 발생한 것을 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
 NoMethodError (private method `gsub' called for :autologin:Symbol):
   /usr/lib/ruby/vendor_ruby/rack/backports/uri/common.rb:24:in `encode_www_form_component'
   /usr/lib/ruby/vendor_ruby/rack/utils.rb:23:in `escape'
   /usr/lib/ruby/vendor_ruby/rack/utils.rb:201:in `set_cookie_header!'
   /usr/lib/ruby/vendor_ruby/rack/utils.rb:238:in `delete_cookie_header!'
   /usr/lib/ruby/vendor_ruby/rack/response.rb:63:in `delete_cookie'
   /usr/lib/ruby/vendor_ruby/action_controller/cookies.rb:94:in `delete'
   app/controllers/application_controller.rb:32:in `handle_unverified_request'
   /usr/lib/ruby/vendor_ruby/action_controller/request_forgery_protection.rb:79:in `verify_authenticity_token'
   /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:178:in `send'
   /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:178:in `evaluate_method'
   /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:166:in `call'
   /usr/lib/ruby/vendor_ruby/action_controller/filters.rb:225:in `call'

이에 대한 해결책이 Redmine의 Issue에 서 논의되었는데 이것은 Rack 1.3.1에서 발생하는 문제로 보입니다. Redmine 1.3.0의 Code를 확인해 보니 Issue에서 언급된 내용은 Fix되어 있지만, 다른 Code에서 동일한 문제를 발생시키는 것을 확인할 수 있었습니다.

이 문제를 해결하려면 Rack 1.4.0을 설치해야 합니다. 하지만 PPA로 Redmine을 설치한 경우에는 Rack 1.3.1이 System에 Package로 설치되기 때문에, Issue를 참고하여 문제를 해결하기 위한 Patch를 만들어 봤습니다.

Redmine Server에서 아래의 Patch를 Download한 후, 다음과 같이 입력하여 Patch를 적용합니다.

이 Patch는 Redmine 1.3.0에서 Test되었습니다. 이 외의 Version에 적용할 경우 문제가 발생할 수 있습니다.

최근 PPA를 통해서 배포된 Redmine 1.3.2를 설치하면 Rack 1.4.1이 같이 설치됩니다. 때문에 위와 같은 문제가 발생하지 않습니다. (2012-04-04)

1
2
3
4
$ sudo mv cookie_symbol_to_s-1.3.0.txt /usr/share/redmine/cookie_symbol_to_s.patch
$ cd /usr/share/redmine
$ sudo patch -p0 < cookie_symbol_to_s.patch
$ sudo service apache2 restart

Patch를 적용한 다음, 다시 Eclipse에서 Task를 Submit하면 Task가 제대로 Redmine에 적용된 것을 확인할 수 있습니다.