Git 에서 지원하는 기능 중의 한 가지가 바로 hooks 이다.
다른 형상관리 도구 또는 변경관리 도구에서는 trigger 기능이라고도 부른다.

예를 들어 개발자가 Local에서 commit을 한 것을 Remote로 push를 할 때에
어떤 작업을 실행하고 싶은 것이 있을 때 사용할 수 있는 기능이다.

Git의 어떤 행위를 수행 했을 때 특정 작업을 하도록 연결을 하고 싶다면 이 기능을 사용하면 되는 것이다.
 


Redmine에서는 Git을 저장소에 연결할 수 있다.


gitweb에 비해서 기능적으로는 조금 부족할 수도 있지만,
그에 비해서 훨씬 편리하고 예쁜 인터페이스를 자랑한다. 개인적으로 너무나 좋아한다.


그리고 Redmine은 Git의 commit을 작업으로 관리할 수도 있다.



그런데, 이렇게 아름다운 Redmine과 Git의 관계에 몇 가지 문제가 존재한다.
문제일 수도 있고, 그냥 이슈일 수도 있겠다.

1. Redmine과 Git은 같은 위치에 존재해야 한다.
   - Remote repository를 지원하지 않는 것은 정말 아쉽다.
   - mirroring 등의 방법으로 해결할 수는 있지만 문제는 문제다.

2. 대용량 repository 처리 시간에 따른 오류 발생 가능성이 있다.
   - Git 정보를 Web으로 처리하기 위해서 Redmine은 별도 가공을 해야 하는데 이 때 많은 시간이 소요된다.
   - Redmine은 웹으로 처리가 되다보니 지나치게 많은 소요시간이 걸리게 되면 Timeout이 되게 되는 것이다.
   - Apache의 Timeout 시간을 늘리는 것으로 임시조치는 할 수 있지만, 역시 문제는 문제다.

3. Git에 새로운 commit이 push 되었어도 Redmine에 실시간으로 반영되지 않는다.
   - 저장소 탭을 누군가 열어보기 전까지는 Redmine은 Git의 새로운 변경 내역을 알지 못한다.
   - 이 부분은 마땅히 해결할 방법이 없다. 관리자가 정기적으로 저장소 탭을 실행하곤 해야 하는 것이다.
   - 그런데, 이 때 Git의 hooks 기능을 사용하면 된다 !!!



정리해보면,
Redmine에서 형상관리 도구로 Git을 지원을 해주고 있지만 몇 가지 제약사항이 있다.
그 중 한 가지는 Git 저장소의 변경 사항이 실시간으로 Redmine에 반영이 되지 않는다는 것이다.
그래서 Git의 hooks 기능을 이용해 저장소의 변경 사항이 바로 바로 Redmine에 반영이 되도록 해보겠다.


원하는 결과를 얻기 위해서는 고려해야 할 사항들이 있다.
   - 우리가 원하는 기능을 수행할 시기는 Git Repository에 commit이 들어온 다음이다.
   - 우리가 원하는 기능은 Redmine의 저장소 페이지를 자동으로 여는 것이다.
   - Redmine의 저장소 페이지를 열도록 하기 위해서는 페이지를 열 수 있는 권한이 필요하다.


그런데, 이 부분을 처리하기 위해 알아 보던 중 또 하나 새로운 사항을 알게 되었다.

 


Redmine에서 설정 부분의 저장소 부분에 대한 것들을 살펴보자.

아래 적힌 내용은 저자가 테스트해본 결과에 기반한 것이다.
저자가 잘못 알고 있는 부분이 있다면 언제든 알려주기 바란다 !!!!


□ 커밋(commit)된 변경묶음을 자동으로 가져오기
   - Redmine 탭에서 '저장소'를 클릭하여 페이지를 열 때 저장소의 변경 사항을 받아오게 한다.
   - 선택하지 않으면 변경된 사항을 가져오지 않는다. 이런 경우 별도로 cron 작업을 통해서 변경 사항을 적용한다.

□ 저장소 관리에 WS를 사용
   - Redmine 공식적인 설명을 보면, SVN 저장소를 생성하기 위한 스크립트를 설치했을 때 활성화 시켜야 한다고 한다.
   - 그런데, Git refresh를 할 때에도 활성화 되어야 한다. 이유는 아직 모르겠다.

□ API 키
   - 실행 권한을 받기 위해서는 '키 생성'을 하고 이를 사용하면 된다.




자~ 서론이 길었다. 이제 시작해보자.

우리가 원하는 것은 현재 Redmine에 있는 하나의 프로젝트에서 사용하고 있는 Git repository에
새로운 commit이 들어오면 Redmine에게 정보를 리프레쉬 하라고 명령을 보내는 것이다.


1. Redmine 준비하기
   - 위 스크린샷과 같이,
   - [ 관리 → 설정 → 저장소 ] 메뉴에서 설정을 하자.
      ▷ 커밋(commit)된 변경묶음을 자동으로 가져오기 : 활성화
      ▷ 저장소 관리에 WS를 사용 : 활성화
      ▷ API 키 : 키생성


2. 저장소 경로 확인하기
   - 어떤 저장소인지 확인을 하자.



3. Git repository에 hook 설정하기
   - [ post-receive ] hook을 작성하자.

$ cd /srv/repository/barerepo.git
$ cd hooks
$ nano ./post-receive

   - [ _apikey ] 값은 위에서 생성한 값을 이용하면 된다.
   - [ _projectid ] 값은 프로젝트의 식별자를 사용한다.

#!/bin/bash

_apikey=UDcdoUtTm4a15xycCH52
_projectid=test

curl "http://127.0.0.1/redmine/sys/fetch_changesets?key=$_apikey&id=$_projectid"&

$ chmod +x ./post-receive

이걸로 끝이다.

그런데, 실제 push 작업을 해보면 무언가 좀 이상한 것이 보일 것이다.

$ git push
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 233 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
remote:                                                  Dload  Upload   Total    Spent     Left    Speed
remote: 100     1       0     1          0     0       0           0     --:--:--  0:00:07 --:--:--     0
remote:  To /srv/repository/barerepo.git
   bbde6a2..1107f45  master -> master

push를 하게 되면 Remote repository 입장에서 commit을 받아들인 후 post-receive 명령까지 수행을 해야 한다.
push 작업이 마무리 되는 순간은 post-receive 스크립트가 모두 완료가 되는 때이다.

그래서, 이렇게 하는 것이 문제가 될 수도 있다. 개발자 입장에서는 commit만 push가 되면 되는데,
(개발자 입장에서) 알지 못할 작업 때문에 push가 완료되는데에 시간이 더 소요되기 때문이다.



단지 어떻게 하는지만 알고 싶은 사람은 여기까지면 충분~!!
조금 더 알고 싶은 사람을 위해 설명을 추가하면...

   - [ http://<redmine url>/sys/fetch_changesets?key=<key값> ]과 같이 사용해도 충분하다.
   - 다만, 위와 같이 사용할 경우 사용하고 있는 redmine 전체에 대해서 refresh 하게 된다.

   - 전체가 아니라 특정 프로젝트만 refresh 하고 싶은 경우 위와 같이 [ &id=<식별자> ]를 붙이면 된다.

   - redmine 가이드를 보면 Git repository 이름을 사용하게 되어있는데, 그렇게 하면 실행이 안되었다.
   - 기능 변경이 있던지, 아니면 뭔가의 오류로 보인다.

   - [ /sys/fetch_changesets ] 주소는 그냥 사용하면 된다.

   - 개발자의 개발 과정에 지장을 주기 싫다면 (push 명령의 완료 시점) 위와 같이 이벤트 드리븐 방식으로 하면 안된다.
   - cron 등의 방법을 사용해서 개발자 부담을 줄여주는 것도 고려해볼만 하다.
   - [ ruby /path_to_redmine/redmine/script/rails runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 & ]


Redmine 공식 가이드는 아래와 같다.

http://www.redmine.org/projects/redmine/wiki/HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit

반응형

Redmine이 자랑하는 대표적인 기능 중 하나가 바로 간트(Gantt) 차트이다.
디자인이 비교적 예쁜 편이라서 많은 사람들이 그림파일로 착각을 하는 경우도 있지만 HTML로 만들어져 있다.


기특하게도 Redmine은 내보내기 기능도 제공을 해준다.
PDF 파일로도 내보내기가 가능하고, PNG 파일로도 내보내기가 가능하다.

그런데, PDF 파일 내보내기의 경우엔 별 문제가 없지만,
PNG 파일 내보내기의 경우에는 한글 출력에 문제가 있다.


한글 부분이 ????? 로 출력이 되는 것이다.
이는 한글 폰트 설정으로 인한 문제이다.

폰트 설정에 대한 내용은 [ config/ ] 디렉토리에 있는 [ configuration.yml ] 파일에서 셋팅을 해야 한다.

기존부터 사용하고 있었다면 그 파일을 그대로 사용하면 되고,
사용하고 있던 파일이 없다면 example 파일을 이용하면 편리하다.

$ cd /srv/install/redmine/config/
$ mv ./configuration.yml.example ./configuration.yml

이제 폰트를 셋팅해보자.

$ cd /srv/install/redmine/config/
$ nano ./configuration.yml

파일의 밑 부분을 살펴보면 [ rmagick_font_path: ] 부분이 있다.
여기에 사용할 폰트의 경로를 적어주면 된다.

rmagick_font_path: /usr/share/fonts/truetype/nanum/NanumGothic.ttf

그리고 Apache2를 재시작해주자.

$ sudo service apache2 restart

그리고 다시 PNG 내보내기를 하면 한글이 잘 출력된다는 것을 확인할 수 있다.


이것으로 해결 끝~

반응형

만날 살펴보다가 꼭 신경안쓸 때 새로운 버전이 나온다.

• Defect #12650: Lost text after selection in issue list with IE
• Defect #12684: Hotkey for Issue-Edit doesn't work as expected
• Defect #13405: Commit link title is escaped twice when using "commit:" prefix
• Defect #13541: Can't access SCM when log/production.scm.stderr.log is not writable
• Defect #13579: Datepicker uses Simplified Chinese in Traditional Chinese locale
• Defect #13584: Missing Portuguese jQuery UI date picker
• Defect #13586: Circular loop testing prevents precedes/follows relation between subtasks
• Defect #13618: CSV export of spent time ignores filters and columns selection
• Defect #13630: PDF export generates the issue id twice
• Defect #13644: Diff - Internal Error
• Defect #13712: Fix email rake tasks to also support no_account_notice and default_group options
• Defect #13811: Broken javascript in IE7 ; recurrence of #12195
• Defect #13823: Trailing comma in javascript files
• Patch #13531: Traditional Chinese translation for 2.3-stable
• Patch #13552: Dutch translations for 2.3-stable
• Patch #13678: Lithuanian translation for 2.3-stable

마이너 업데이트는 새로운 기능이 추가없이 Defect 수정 위주이다.

개인적으로 그닥 피부에 와닿는 부분은 없지만... 업데이트는 해야지..... ^^



기존 2.3.0 버전 설치는 다음 포스팅을 참고해서 진행했다.

   - http://whatwant.tistory.com/553



1. PostgreSQL

   - 제일 중요한 데이터베이스를 혹시 모르니 백업을 해두자.

$ sudo su - postgres

$ pg_dump -Fc --file=redmine_20130503.sqlc redmine



2. Redmine 압축파일

   - 최신 버전의 Redmine을 다운로드 받고 압축을 풀자.

$ cd /srv/install/

$ wget http://rubyforge.org/frs/download.php/76933/redmine-2.3.1.tar.gz
$ tar zxvf redmine-2.3.1



3. Files 복사

   - 파일들과 플러그인들을 복사하자.

$ cd /srv/install/redmine-2.3.1/

$ sudo cp /srv/install/redmine-2.3.0/config/database.yml ./config/
$ sudo cp /srv/install/redmine-2.3.0/config/configuration.yml ./config/  (없을 수도 있다)
$ sudo cp -r /srv/install/redmine-2.3.0/files/* ./files/
$ sudo cp -r /srv/install/redmine-2.3.0/plugins/*  ./plugins/



4. Upgrade

   - 이제 업그레이드 작업 진행하면 된다.

   - Ruby 권한 관련 이슈가 있어서.... 아래 진행은 애초 설치 진행 時 (sudo su -) 권한으로 진행을 한 상황이다.

$ sudo su -
$ cd /srv/install/redmine-2.3.1

$ bundle install
$ rake generate_secret_token
$ rake db:migrate RAILS_ENV=production
$ rake redmine:plugins:migrate RAILS_ENV=production
$ rake tmp:cache:clear

$ rake tmp:sessions:clear




5. 권한 설정

   - 중요한 권한 설정을 해주자.

$ sudo su -
$ cd /srv/install/redmine-2.3.1

$ chown -R www-data:www-data files log tmp public
$ chmod -R 755 files log tmp public/plugin_assets
$ chown -R www-data:www-data ./config/database.yml
$ chmod 600 ./config/database.yml



6. 웹 설정

   - 링크 잡아주고 재시작하자.

$ sudo su -
$ cd /var/www/

$ ln -s /srv/install/redmine-2.3.1/public ./redmine
$ service apache2 restart



접속 성공~!!!

반응형

시스템을 운영하다가 사고가 발생하면 가장 많은 도움을 받는 것이 바로 Log 파일이다.
Redmine의 경우에도 당연히 Log 파일을 만들어주고 있다.

그런데, 관심을 두지 않고 있어서 별 문제가 없어 보이지만 지금 현재 Log 파일을 살펴보면
엄청난 용량에 무의미한 데이터를 계속 저장하고 있을 수도 있다.


1. Redmine's Log File

   - 기본 경로는 redmine 설치 디렉토리 밑에 ./log/ 에 생성이 된다.
   - 필자의 경우 [ ./log/production.log ] 파일로 생성이 되고 있다.


2. Log contents

   - 아무런 설정 변경 없이 그냥 사용할 경우 어떤 내용이 채워지고 있을까?
   - [ cat ./log/production.log ]

Started GET "/redmine/" for 10.0.2.2 at 2013-04-28 18:31:27 +0900
Processing by WelcomeController#index as HTML
  Current user: anonymous
  Rendered news/_news.html.erb (1.3ms)
  Rendered welcome/index.html.erb within layouts/base (3.0ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.0ms)
Completed 200 OK in 26ms (Views: 9.5ms | ActiveRecord: 4.3ms)
Started GET "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:29 +0900
Processing by AccountController#login as HTML
  Current user: anonymous
  Rendered account/login.html.erb within layouts/base (3.6ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.1ms)
Completed 200 OK in 13ms (Views: 9.7ms | ActiveRecord: 1.5ms)
Started POST "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:35 +0900
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pe5aTLPaPSNRv6MX244+6cDZBU1JgcOtjdGm9bE3xis=", "back_url"=>"ht$
  Current user: anonymous
Failed login for 'admin' from 10.0.2.2 at 2013-04-28 09:31:35 UTC
  Rendered account/login.html.erb within layouts/base (1.7ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.1ms)
Completed 200 OK in 8ms (Views: 6.6ms | ActiveRecord: 0.5ms)
Started POST "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:39 +0900
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pe5aTLPaPSNRv6MX244+6cDZBU1JgcOtjdGm9bE3xis=", "back_url"=>"ht$
  Current user: anonymous
Successful authentication for 'admin' from 10.0.2.2 at 2013-04-28 09:31:39 UTC
Redirected to http://127.0.0.1/redmine/
Completed 302 Found in 6ms (ActiveRecord: 2.8ms)
Started GET "/redmine/" for 10.0.2.2 at 2013-04-28 18:31:39 +0900
Processing by WelcomeController#index as HTML
  Current user: admin (id=1)
  Rendered news/_news.html.erb (2.8ms)
  Rendered welcome/index.html.erb within layouts/base (5.1ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.0ms)
Completed 200 OK in 19ms (Views: 11.1ms | ActiveRecord: 3.6ms)

   - 에러만 기록되고 있는 것이 아니라 Redmine에서 이루어지는 모든 상황이 전부 기록되고 있는 것을 확인할 수 있다.
   - 그러다보니 Log의 크기를 감당하기가 쉽지가 않다.



3. Guide Document

   - Redmine에서 Log 관련 설정을 어떻게 해야하는지에 대한 내용은 다음에서 확인할 수 있다.
   - http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Logging-configuration

   - Log 파일에 대한 설정을 어떻게 해야하는지 확인하기 위해서 현재 사용하고 있는 Ruby 버전을 확인해보자.

 Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL
Redmine plugins:

 $ ruby --version
ruby 1.9.3p392 (2013-02-22 revision 39386) [i686-linux]


   - Ruby v1.9.3 에서 Logger에 대한 도움말은 아래의 주소에서 찾아볼 수 있다.
   - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html

   - Redmine에서 검색 결과로 나온 document도 있다.
   - http://www.redmine.org/boards/2/topics/25236




4. ./config/addional_environment.rb

   - Redmine의 config 디렉토리에 있는 설정 파일들 중 하나에서 Log에 대한 설정을 할 수 있다.

   - 우선 설정 파일을 만들자.

$ cd ./config/

$ cp ./additional_environment.rb.example ./additional_environment.rb

$ ls
additional_environment.rb          boot.rb                    environment.rb  locales            settings.yml
additional_environment.rb.example  configuration.yml.example  environments    preinitializer.rb
application.rb                     database.yml               initializers    routes.rb

   - 파일 내용을 보면 아래와 같다.

 $ cat ./additional_environment.rb
# Copy this file to additional_environment.rb and add any statements
# that need to be passed to the Rails::Initializer.  `config` is
# available in this context.
#
# Example:
#
#   config.log_level = :debug
#   ...
#

   - 아직은 주석밖에 없다. 그렇다는 말은 지금 현재는 default 설정으로 되어있다는 것이다.

   - 특별한 설정 없는 default 설정은 다음과 같은 값으로 되어있는 것과 같다고 한다.

 config.logger.level = Logger::INFO

   - 로그 파일을 분할을 한다거나 하는 설정은 전혀 없는 것이다. 이 부분에 대한 설정을 해보자.

config.logger = Logger.new('./log/production.log', 5, 1024000)
config.logger.level = Logger::ERROR

   - Logger.new 첫 번째 파라미터는 로그 파일 저장 위치이고,
   - 그 다음은 한 개의 로그 파일의 크기가 약 10MB가 되면 최대 5개로 분할되어 저장을 하라는 의미이다.
   - 로그 파일이 모두 채워지면 처음 만들어진 것부터 차례대로 삭제된다.

   - config.logger.level 에서 사용할 수 있는 옵션은 FATAL, ERROR, WARN, INFO, DEBUG 이다.
   - 기본 설정인 INFO의 경우 너무 많은 정보를 저장하기 때문에, ERROR 정도로 설정을 변경하는 것을 추천한다.


   - 이렇게 파일을 저장하고 Apache2를 재시작하면, 변경된 설정으로 Log가 남겨지게 된다.




결론만 보면 그냥 설정 파일 하나 추가해서 두 줄 추가하는 것 뿐이지만,
이번 기회에 Redmine의 Log에 대해서 정리한다는 생각으로 한 번 살펴봤다는 의미로 생각하면 되겠다.

반응형

Redmine에 조금은 특이한 기능이 하나 있다.

바로 뉴스(News)라는 메뉴인데,
게시판 인터페이스에 "요약"이라는 필드가 하나 추가된 형태로 일종의 공지사항과 같은 역할을 한다.

팀원들에게 공지할 내용이나 새로운 소식들을 올려놓으면
Redmine의 첫 페이지와 프로젝트의 첫 페이지(개요)에 그 내용이 출력이 된다.
모든 프로젝트의 뉴스를 모아서 보여주는 메뉴도 있다.

제대로만 활용하면 꽤나 유용한 기능인 것은 분명하지만,
개발자에게 조금 더 자극적(?)으로 공지를 하고 싶은 경우에는 조금 아쉬운 부분도 있다.

이 때 사용할 수 있는 아주 유용한 Plugin이 하나 있다.


□ Name    : Banner
□ URL      : http://www.redmine.org/plugins/banner


1. 테스트 환경

   - 현재 가장 최신 버전으로 테스트 했으며, 직접 Source code를 내려 받아서 설치했다.
   - 여기 블로그의 포스팅을 참고하면 된다.

Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL



2. 경로 & 권한

   - 이 부분에 대해서 필자가 완벽히 이해를 하고 마스터를 한 것이 아니라서 모든 경우에 대해서 설명은 못하겠다.
   - 우선 필자가 구축한 Redmine은 WAS로 Apache2를 선택했고, Passenger 모듈을 활용했다.
   - 경로는 필자의 습관상 [ /srv/install/redmine/ ] 밑에 설치를 했다.
   - 마지막으로, 당연히 www-data 계정에게 필요한 소유권을 부여했다.
   - 보안상의 이슈는 논외로 하자.

   - 사실 필자는 조금 무식해서 Ruby에 대한 지식이 엄청나게 부족하다.
   - 그래서 Ruby를 사용하기에 많은 어려움을 겪고 있다.
   - 이런 사용성 측면은 정말 Ruby가 극복해야할 큰 문제로 생각된다.
   - 밑의 Ruby와 관련된 명령을 처리하기 위해서는 Redmine 설치할 때의 조건을 다시 한 번 확인을 하기 바란다.



3. 다운로드

   - 나중의 업데이트를 고려하면 Git을 이용해서 clone을 받아서 설치하는 것이 편리하다.
   - Git이 아직 설치되어 있지 않으면 이번 기회에 설치를 하는 것을 추천한다. (http://whatwant.tistory.com/289)

$ sudo su -
$ cd /srv/install/redmine
$ cd ./plugins
$ git clone http://github.com/akiko-pusu/redmine_banner.git

   - 필자의 경우 Redmine을 설치할 때 Ruby를 설치하면서 [ sudo su - ] 계정으로 설치를 하였었다.



4. 설치

   - 필요한 gem 들을 설치하기 위해 필요한 과정이 있다.

$ sudo su -
$ cd /srv/install/redmine
$ rake redmine:plugins:migrate RAILS_ENV=production
$ chown -R www-data:www-data ./redmine_banner
$ service apache2 restart

   - 설치를 하고 내용을 확인하면 아래와 같다.

Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL
Redmine plugins:
  redmine_banner                        0.0.8
  redmine_ckeditor                       0.4.0

   - 예전에 설치한 CKEditor plugin도 같이 보인다.



5. 사용

   - 관리자 계정으로 관리 메뉴를 살펴보면 새로운 항목이 추가된 것을 확인할 수 있다.


   - [ 배너 광고 ]라는 메뉴가 바로 그것이다 !!!



   - 정말 꼭 필요하고 원하는 기능만 simple하고 예쁘게 잘 넣어놓았다.
   - 이렇게 훌륭한 기능을 제공하면서 왜 버전을 "0.0.8"이라고 했는지 의문이 들 정도다.


   - 머리말, 꼬리말 아니면 둘 모두 선택해서 출력할 수 있다. 눈에 확 들어온다.

   - Redmine 전체 프로젝트 대상으로 공지할 수도 있지만,
   - 위 스크린샷에서 보는 것 처럼, 개별 프로젝트에서도 모듈로 선택해서 활용할 수 있다.


   - 프로젝트에서 사용하는 배너 광고의 인터페이스를 보면 앞에서 봤던 것과 조금 다른 것을 알 수 있을 것이다.
   - 표시 위치를 고를 수 있다는 점이 가장 큰 차이다.
   - 초기화면에서만 보여 줄수도 있고 새로운 일감에서만 보여줄 수도 있고...



6. 주의사항 및 팁

   - 크롬(Chrome)에서는 별 문제가 없는데, IE에서는 출력 위치가 틀어질 수도 있다.
   - IE8에서 테스트 할 때, 전체 배너와 프로젝트 배너를 동시에 설정하면 출력 위치가 틀어졌다.
   - 하나만 사용할 경우에는 별 이상이 없었다.

   - 전체 배너 설정에서 타이머 사용이 안된다.
   - 필자가 제대로 하지 못해서일 수도 있는데, 여하튼 사용이 안되었다.

   - CKEditor로 편집된 내용도 별 이상없이 잘 출력이 된다.
   - 당연히 위키로 편집된 내용도 잘 출력이 된다.


모두 즐거운 Redmine 생활 하시길~

반응형

예전에 한 번 작성을 했었던 Plugin 인데,
최근에 이슈가 잠시 있어서 관련 작업을 했던 김에 포스팅 자체도 좀 업데이트 아니 재작성을 해보았다.

update #1 : 2013.04.14 (Sun)



Redmine이 자랑하는 것 중 하나가 바로 Wiki 지원이다.

높은 곳에 계시는 분들은 별로 신경을 쓰지 않는 부분이기에 지금까지 알아서 하는 부분으로 취급되었었지만,
최근에는 관리의 범주로 인식이 되어 중요한 개발 환경의 한 요소로 인정받는 것이 "커뮤니티" 기능이다.

애자일이 대두된 이후 개발자의 목소리가 더더욱 커지면서 "커뮤니티" 기능이 더더욱 필요하게 되었고
이러한 커뮤니티 기능을 언급하게 되면 가장 자주 나오는 아이템이 바로 "Wiki(위키)"이다.

마침 Redmine이 갖고 있는 대표 기능 중 하나가 바로 "Wiki"이고,
프로젝트 관리 도구로 Redmine을 선택하는 이유 중 하나가 바로 위키 기능인 것이다.


그런데, 문제는 Wiki에 익숙한 개발자가 생각보다 많지 않다는 점이다.
정말 의외인데 개발자들이 원한다고 해서 위키를 제공을 해주면 정작 위키를 사용하기 어렵다는 투정을 듣게 된다.

또 하나의 문제는 위키 문법이 사투리와 같이 좀 다른 유형들이 있다는 점이다.
기존에 다른 유형의 위키를 썼던 분들이 Redmine에서 제공하는 위키에 적응을 못하기도 하는 것이다.

마지막으로 하나 더 있는 문제점은 Redmine 위키가 갖고 있는 문제로써
Redmine 위키 문법이 생각보다 막강하지는 않다는 점이다.
즉, 기능적 제약이 좀 많은 편이다. 아쉬운 부분이다.



이런 문제를 해결하는 방법 중에 가장 편하면서도 간단한 것이 바로 Plugin을 이용하는 것이고,
그 중 가장 유명한 것이 바로 CKEditor 이다.

Redmine Plugin으로 만들어진 것이 CKEditor Plugin이 아니다.
올해로 10주년을 맞이한 유명한 Web Text Editor가 바로 CKEditor 이다.

   - http://ckeditor.com/


너무 서론이 길었다.

바로 설치해보자.

□ Name    : Redmine CKEditor
□ URL      : http://www.redmine.org/plugins/ckeditor



1. 테스트 환경

   - 현재 가장 최신 버전으로 테스트 했으며, 직접 Source code를 내려 받아서 설치했다.
   - 여기 블로그의 포스팅을 참고하면 된다.

Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL



2. 경로 & 권한

   - 이 부분에 대해서 필자가 완벽히 이해를 하고 마스터를 한 것이 아니라서 모든 경우에 대해서 설명은 못하겠다.
   - 우선 필자가 구축한 Redmine은 WAS로 Apache2를 선택했고, Passenger 모듈을 활용했다.
   - 경로는 필자의 습관상 [ /srv/install/redmine/ ] 밑에 설치를 했다.
   - 마지막으로, 당연히 www-data 계정에게 필요한 소유권을 부여했다.
   - 보안상의 이슈는 논외로 하자.

   - 사실 필자는 조금 무식해서 Ruby에 대한 지식이 엄청나게 부족하다.
   - 그래서 Ruby를 사용하기에 많은 어려움을 겪고 있다.
   - 이런 사용성 측면은 정말 Ruby가 극복해야할 큰 문제로 생각된다.
   - 밑의 Ruby와 관련된 명령을 처리하기 위해서는 Redmine 설치할 때의 조건을 다시 한 번 확인을 하기 바란다.



3. 다운로드

   - 나중의 업데이트를 고려하면 Git을 이용해서 clone을 받아서 설치하는 것이 편리하다.
   - Git이 아직 설치되어 있지 않으면 이번 기회에 설치를 하는 것을 추천한다. (http://whatwant.tistory.com/289)

$ sudo su -
$ cd /srv/install/redmine
$ cd ./plugins
$ git clone http://github.com/a-ono/redmine_ckeditor.git

   - 필자의 경우 Redmine을 설치할 때 Ruby를 설치하면서 [ sudo su - ] 계정으로 설치를 하였었다.



4. 설치

   - 필요한 gem 들을 설치하기 위해 필요한 과정이 있다.

$ sudo su -
$ cd /srv/install/redmine
$ bundle install --without development test
$ chown -R www-data:www-data ./redmine_ckeditor
$ service apache2 restart

   - 설치를 하고 내용을 확인하면 아래와 같다.

Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL
Redmine plugins:
  redmine_ckeditor                       0.4.0

   - 얼마전까지만 해도 CKEditor Plugin과 Redmine 2.3.0 버전에 충돌(?)이 조금 있었다.
   - 사용 중에 CKEditor가 사라지는 현상이 있었는데 CKEditor Plugin 0.4.0 버전부터는 해결이 되었다.


5. 사용

   - CKEditor를 사용하기 위해서는 [ 관리 ] 메뉴에서 [ 설정 ] 부분에 있는 [ 본문 형식 ]을 변경해야 한다.


   - 기존의 위키 방식을 [ textile ] 이라고 하고 우리가 지금 사용하고자 하는 것은 [ CKEditor ]이다.


   - 이렇게 설정을 하면, Redmine에서 위키가 사용되는 모든 곳에 CKEditor가 보이게 된다.


   - 무료로 제공되는 Editor이지만 상당히 쓸만하다.




6. 주의사항

   - 특정 프로젝트 단위로 적용을 결정할 수 없다.
   - 전체 일괄 CKEditor를 쓸건지 Textile, 즉 위키를 사용할 것인지 결정을 해야 한다.

   - 위키를 사용하던 중에 CKEditor를 적용하게 되면 기존에 입력한 것은 전부 새로 편집을 해야 한다.
   - CKEditor는 위키를 편하게 사용하도록 도와주는 것이 아니다.
   - HTML 적용을 도와주는 에디터이다. 위키와는 완전히 별도이다.
   - 기존 작성 내용을 분실하지는 않지만, 새로 편집을 해야한다는 것은 주의하기 바란다.


모두 즐거운 Redmine 생활 하시길~
반응형

2013-03-19 일자로
2.2.x 버전의 최신판 2.2.4 버전과
새로운 기능과 함께 등장한 2.3.0 버전이 등장했다.

그런데,
2.2.4 버전의 경우 defect과 patch만 반영이 되어있지만,
2.3.0 버전은 새로운 기능들이 많이 추가가 되었다.

그 새롭게 추가된 기능 중에 관심을 확~끌었던 것이 하나 있어서 소개를 하고자 한다.


Redmine의 가장 멋진 메뉴 중 하나인 간트차트에 새로운 기능이 추가가 되었다.

Feature 명칭은 "Show relations in Gantt diagram"인데,
일감(issue)의 관계를 간트차트에서 너무나 예쁘게 출력을 해주는 것이다.

별도의 그림파일이 아님에도 정말 신기하고 정말 너무 예쁘다!!! (혼자서 감동~ @.@)


그런데, 사실 그동안 Redmine을 사용해오면서 일감의 관계를 사용하지 않았었다.
그래서 일감 관계 설정 방법을 몰라서 이번 기능을 테스트해보려 정말 고생을 했다 ^^


본래부터 일감 관계를 사용하시던 분들에게는 당연한 내용이겠지만,
저처럼 모르는 사람을 위한 간단한 기능 소개를 하겠다.


일감의 관계 설정은 [ 새 일감 만들기 ] 때에는 할 수 없다.
일단, 일감을 만든 후에 일감 정보를 보면 [ 연결된 일감 ] 부분에서 "추가"를 통해서 설정이 가능하다.


일감들의 관계는 정말 다양하게 존재한다.
사실 번역이 조금... 익숙한 설명은 좀 아니라서 좀... 하지만, 한 번씩 해보면 알만한 내용이긴 하다.


다들 알겠지만, 일감의 번호를 정확히 알지 못할 때엔 일감의 이름을 살짝 써주면 검색을 해서 선택할 수 있게 보여준다.

이렇게 일감 관계를 설정하면 간트차트에서 그 관계에 따라 예쁜 화살표를 출력해준다 !!!

다들 재미있고 유용하게 사용하면 좋겠다 !!!
반응형

꾸준히 업데이트를 해주고 있는 아름다운 Redmine이 2013.03.19 날짜에 2.3.0 버전과 2.2.4 버전을 배포했다.

기존 install 포스팅으로도 설치에 큰 이슈가 없을 것 같기는 하지만,
그래도 오랜만에 다시 한 번 천천히 설치 과정을 진행해보려고 한다.


01. 버전 호환성 확인하기

   - 정말 다시 한 번 말하지만, Ruby 대중화의 가장 큰 적은 버전 호환성이다 !!!

 Redmine  Supported Ruby  Required Rails  Supported Rack  Supported RubyGems
 2.3.0  ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0
jruby-1.7.2
 Rails 3.2.13  ?  RubyGems <= 1.8
 2.2.4  ruby 1.8.7, 1.9.2, 1.9.3,
jruby-1.6.7
 Rails 3.2.13  ?  RubyGems <= 1.8



02. 기본 패키지 설치

   - Ruby, Redmine 설치를 위해 사전에 필요한 패키지들을 모두 설치하자.

$ sudo apt-get install build-essential libpcre3-dev libruby libssl-dev libcurl4-openssl-dev libpq-dev libreadline-dev libjpeg62-dev libpng12-dev curl openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev libncurses5-dev automake libtool bison pkg-config



03. Ruby 설치

   - Ruby 설치를 위해서는 rvm을 활용해야 한다. (여기에서 root 로 변경 후 뒤에 계속 root로....)

$ sudo su -
$ curl -L https://get.rvm.io | sudo bash -s stable
$ source /etc/profile
$ rvm install 1.9.3
$ rvm use 1.9.3
$ rvm --default use 1.9.3 

   - 이렇게 한 뒤 [ rvm -v ] 명령을 통해 ruby 버전이 확인되면 성공한 것이다.
   - 마지막으로 PATH 설정을 추가로 해주어야 하는데, sudo의 PATH 문제로 인해서 조금 더 해줘야 할 것이 있다.

$ nano /etc/environment


PATH="......:/usr/local/rvm/bin"




04. Rails 설치

   - rails를 설치하자.

$ gem install rdoc
$ gem install rails -v 3.2.13
 


05. PostgreSQL 설치 및 설정

     - 개인적 취향이지만 객관적으로도 꽤 괜찮은 database를 설치하자.
     - 그리고 나서 사용할 계정과 데이터베이스를 만들자.

$ apt-get install postgresql

$ su - postgres
$ psql

# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
# \q

$ exit
$ gem install pg



06. ImageMagick

     - rmagick 설치하기

$ apt-get install librmagick-ruby libmagickwand-dev
$ gem install rmagick




07. Redmine

     - 압축파일로 다운로드 받자.

$ cd /srv/install/
$ wget http://rubyforge.org/frs/download.php/76867/redmine-2.3.0.tar.gz
$ tar zxvf  redmine-2.3.0.tar.gz



08. bundler & install

     - 필요한 패키지들을 한 번에 받을 수 있는 놈이 있다.

$ cd redmine-2.3.0
$ gem install bundler

reboot

$ sudo su -
$ cd /srv/install/redmine-2.3.0
$ bundle install --without development test mysql sqlite



09. Apache2 설치

$ apt-get install apache2 apache2-prefork-dev




10. passenger 설치

$ gem install passenger
$ cd /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/
./bin/passenger-install-apache2-module

     - Passenger 모듈을 Apache2에 올리기 위해서는 화면에 나오는 값을 잘 봐야 한다.

$ nano /etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
   PassengerUser www-data
   PassengerDefaultUser www-data

   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p392/ruby
</IfModule>

$ nano /etc/apache2/mods-available/passenger.load

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/ext/apache2/mod_passenger.so


$ cd /etc/apache2/mods-enabled
ln -s ../mods-available/passenger.conf ./passenger.conf
ln -s ../mods-available/passenger.load ./passenger.load



11. database 설정값 등록

$ cd /srv/install/redmine-2.3.0
$ nano ./config/database.yml

 

production:
        adapter: postgresql
        database: redmine
        host: localhost
        username: redmine
        password: redmine
        encoding: utf8
        schema_search_path: public


     - 주의 사항으로는 위의 파일 내용을 입력할 때에 Tab 말고 White-Space로 입력해야 한다.



12. 추가 작업

$ rake generate_secret_token
$ RAILS_ENV=production rake db:migrate
$ RAILS_ENV=production rake redmine:load_default_data
   → Select language [ko]
$ mkdir public/plugin_assets


   - 권한 설정이 중요하다 !

$ chown -R www-data:www-data files log tmp public
$ chmod -R 755 files log tmp public/plugin_assets
$ chown -R www-data:www-data ./config/database.yml
$ chmod 600 ./config/database.yml



 

13. 웹설정

$ cd /var/www/
$ ln -s /srv/install/redmine-2.3.0/public ./redmine

$ nano /etc/apache2/sites-available/default


<Directory /var/www/redmine>

        RailsBaseURI /redmine
        RackEnv production
        RailsEnv production
        PassengerResolveSymlinksInDocumentRoot on

</Directory>


$ service apache2 restart


여기까지 진행하고 웹브라우저로 http://127.0.0.1/redmine에 접속을 하면 Redmine을 볼 수 있다.

초기 관리자는 admin/admin 이다.
반응형

+ Recent posts