ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VisualSVN Server + Bitnami Redmine Stack
    dev/tool 2011. 4. 25. 17:42

    VisualSVN Server 의 편리한 Subversion 계정/저장소 관리 기능과, Redmine 의 강력한 이슈관리/저장소 통합 기능을 사용하여 소스 및 이슈 관리를 한다.

     

    두개의 배포판에 각각 포함된 아파치 서버가 낭비이지만 하나의 서버만 이용하기 위해 나머지 하나를 수동으로 설치하기엔 손이 많이가는 까다로운 작업이라 둘다 사용하도록 한다.

     

    아래는 나의 설치 과정 요약

     

    1.둘다 기본 설치시 80 포트를 사용하므로 둘중 하나의 포트를 적당한 포트(8080)로 변경

     

    2.깔끔하게 Subversion 에 Redmine 용 계정을 하나 만들어 모든 저장소에 접근할 수 있는 권한 할당

     

    3.Redmine 의 관리 - 설정 - 저장소 에서 일감 참조/해결에 사용할 키워드를 설정(issue, close)

     

    4.설정을 원하는 프로젝트의 설정 - 저장소 에서 위의 Subversion 계정을 입력하여 저장소와 프로젝트를 연결
    프로젝트의 저장소 페이지가 오류없이 출력되는지 확인

     

    5.svn 의 pre-hook script 를 수정하여 소스 커밋시 Redmine 이슈와 항상 연결하도록 강제
    <Redmine Root>\config\database.yml 을 참고로 mysql 계정 정보 확인
    svnlook.exe, myslq.exe 실행을 위해 윈도우 PATH 에 해당 경로 추가
    명령어 실행을 위한 문자열을 감싸는 따옴표가 다르니 주의 -> `

     

    pre-commit hook script 참고

     ruby.exe d:\util\svn\pre-commit.rb %1 %2

     

    pre-commit.rb 참고

    repo_path = ARGV[0]
    transaction = ARGV[1]
    svnlook = 'svnlook.exe'
    mysql = 'mysql.exe'

    commit_log = `#{svnlook} log #{repo_path} -t #{transaction}`
    if (commit_log == nil || commit_log.length < 2)
      STDERR.puts("Log message cannot be empty.")
      exit(1)
    end

    if (commit_log =~ /^\s*(?:(?:C|c)lose|(?:I|i)ssue)\s*#(\d+)\s+\S+/)
      issue_number = $1
      redmine_issue_open = `#{mysql} --database=xxxx --user=xxxx --password=xxxx -e "SELECT COUNT(*) AS result FROM issues I INNER JOIN issue_statuses S ON S.id = I.status_id WHERE S.is_closed = 0 AND I.id = #{issue_number};" --skip-column-names`.strip()
      if (redmine_issue_open.eql?("0"))
        STDERR.puts("\nIssue \##{issue_number} 가 없거나 open 상태가 아닙니다.\n이슈목록을 확인하세요.")
        exit(1)
      end
    else
      STDERR.puts("\nCommit 메시지는 다음과 같은 양식을 필요로 합니다.\n-----------------------------\n이슈 참고:\nIssue #123 message\n\nor\n\n이슈 닫기:\nClose #123 message\n-----------------------------")
      exit(1)
    end

    commit 메시지 양식을 간단히 하기위해 issue, close 만 가능하게 했으며, 이슈 번호가 존재하는지 그리고 close 상태가 아닌지만 확인하도록 되어 있음

     

    6.G-Mail 알림 받기 위한 플러그인 설치 및 설정 - http://xyz37.blog.me/50083113439 참고

     

    <Redmine 설치 root>\config\email.yml 참고

     production:
      delivery_method: :smtp
      smtp_settings:
        tls: true
        address: "smtp.gmail.com"
        port: 587
        domain: "smtp.gmail.com"
        authentication: :plain
        user_name: "xxxx@gmail.com"
        password: "xxxx"

    빠진것이 있거나 추가된 내용은 추후 추가.

     

    참고자료
    http://blog.naver.com/PostList.nhn?blogId=xyz37&categoryNo=65

Designed by Tistory.