常規(guī)信息
Redmine一直以來支持不同的版本控制工具集成: Subversion, CVS, Mercurial, Darcs, Git和Bazaar。
首先你要在Redmine主機上安裝合適的二進制包, 并確保這些二進制文件在PATH環(huán)境變量中可用:
SCM | 已測試過的版本 | 說明 |
---|---|---|
Subversion | 1.3 & 1.4 & 1.5 & 1.6 | 需要1.3或者更高的版本 |
CVS | 1.12.12 | 需要1.12,不能同時使用CVSNT |
Mercurial | 0.9.3 | |
Bazaar | l.0.0.candidate.1 & 2.0.4 | |
Darcs | 1.0.7 | |
Git | 1.5.4.2 |
比如, 如果你想用Redmine訪問Subverion版本庫, 你必須在Redmine主機上安裝SVN二進制文件。
給項目添加一個已經(jīng)存在的版本庫
在項目配置選項卡下有 版本庫 子選項庫, 在這里可以為項目添加版本庫。
選擇你所使用的版本庫類型, 并輸入版本庫路徑或者URL
Note
當配置完版本庫第一次訪問時, Redmine將抓取版本庫中已經(jīng)存在的所有提交信息, 并存入數(shù)據(jù)庫。所以如果你的版本庫特別大, 那么該過程將會很長。
為了避免這種情況, 你可以將該過程放在后臺執(zhí)行。
在配置完版本庫后, 運行下面的命令:
$ ruby script/runner "Repository.fetch_changesets" -e production
所有的提交將會被存入數(shù)據(jù)庫
從Redmine0.9之后, 你還可以通過一個鏈接給某一項目或者所有項目執(zhí)行 fetch_changesets:
http://redmine.example.com/sys/fetch_changesets (給所有活動的項目取回變更集)http://redmine.example.com/sys/fetch_changesets?id=foo (僅給foo項目取回變更集)
Subversion 版本庫
Redmine支持的協(xié)議有(http:,svn:,file:), 只需要輸入版本庫的URL
例如:
http://host/path/to/the/repository
如果版本庫需要身份認證, 你需要額外輸入用戶名和密碼
Note
如果你想要用 svn+ssh:// 訪問版本庫, 你必須把svn+ssh配置為非交互的方式。
同時需要設(shè)置ssh認證的 public/private 鑰對
Hint
Subversion 基于路徑的授權(quán)
Redmine對Subversion授權(quán)是這樣處理的: 在配置Subversion版本庫時, 除了輸入URL外, 還需填寫一個擁有Subversion讀權(quán)限的賬戶信息(如果你的Subversion不允許匿名訪問)。 顯然很多商業(yè)公司的代碼有很高的嚴密性, 大多是不允許匿名訪問的,看來是必填了。 而Redmine對Subversion認證不嚴格也是從這里開始的。 填寫了這個賬戶之后, 不管哪個用戶登錄Redmine瀏覽版本庫, 看到的版本庫信息都是該賬戶應(yīng)該能看到的, 而不是當前登錄用戶應(yīng)該看到的。 也就是說, 在這種情況下, 如果你想對代碼瀏覽嚴加控制, 那么就需要創(chuàng)建一個很低權(quán)限的Subversion賬號, 用這個賬號作為Redmine訪問Subversion的賬號。 但這樣一來, 那些具有高權(quán)限的用戶就不樂意了(他們本來是能看到很多代碼的, 但這樣一來他們的權(quán)限無形之中被剝奪了)。
為了滿足商業(yè)軟件公司的需求, 群英匯對Redmine關(guān)于Subversion授權(quán)的部分進行了擴展, 采用Subversion本身的授權(quán)模式。 我們添加了解析Subversion授權(quán)文件的組件, 可以很好地解析每個用戶的權(quán)限, 從而保證Redmine瀏覽權(quán)限和Subversion定義的權(quán)限一致, 完美解決了Redmine中Subversion授權(quán)不嚴格的問題, 實現(xiàn)了Subversion基于路徑的授權(quán)。
配置步驟, 參見 Subversion基于路徑授權(quán)
CVS 版本庫
輸入:
示例:
:pserver:login:password@host:/path/to/the/repository
以下幾種版本庫輸入版本庫的路徑即可
Git 版本庫
Mercurial 版本庫
Hint
解決了中文版Mercurial版本庫無法使用的問題
由于Redmine在匹配Mercurial版本信息時是基于英語匹配的, 所以當我們使用中文Mercurial時, 它會拋出匹配失敗的異常, 造成中文用戶不能使用。
Bazaar 版本庫
Darcs 版本庫
首先將 config/email.yml.example 重命名為 config/email.yml
然后配置發(fā)送郵件需要的參數(shù):
production: delivery_method: :smtp smtp_settings: address: mail.foo.bar port: 25 domain: foo.bar # authentication: :login # user_name: xxx # password: xxx
注意: 用#注銷掉的那三行信息,是郵件服務(wù)器身份驗證信息。但是如果你的用戶已經(jīng)使用了域驗證,就不需要那三行信息。
訪問redmine,以管理員的身份登錄系統(tǒng),點擊"管理"—->""配置"—->"郵件通知",然后點擊右下角的"發(fā)送測試郵件",就可以測試你的郵件服務(wù)配置是否成功了。
Note
當delivery_method設(shè)置為:smtp時, 它的處理流程是這樣的:
在觸發(fā)郵件發(fā)生的事件發(fā)生后, 首先發(fā)送郵件, 直到郵件發(fā)送完畢, 頁面才跳轉(zhuǎn)。這就是說在發(fā)送郵件的過程中, 頁面一直處于等待狀態(tài)。 那么有沒有一種異步發(fā)送郵件機制呢?
在Redmien 0.9 之后, 可通過將delivery_method設(shè)置為:async_smtp, 這時發(fā)送郵件和頁面跳轉(zhuǎn)屬于不同的線程, 當觸發(fā)郵件的事件發(fā)生后,發(fā)送郵件將會通過消息隊列在后臺執(zhí)行, 而頁面繼續(xù)向下執(zhí)行, 不用等到郵件發(fā)送完畢。
從Redmien-0.8.0 開始, 通過配置, 你可以以發(fā)送郵件的方式創(chuàng)建或者評論問題(issue)。
你可以通過以下幾種方式配置Redmine接收郵件的功能:
用一個獨立的腳本轉(zhuǎn)發(fā)郵件服務(wù)器發(fā)來的郵件。這個腳本從標準輸入讀取原始郵件并通過HTTP請求轉(zhuǎn)發(fā)給Redmine。 該腳本在redmine目錄下: extra/mail_handler/rdm-mailhandler.rb
使用這項功能之前, 你需要開啟接收郵件的API:
開啟操作: "管理"->"配置"->"接收郵件", 選中開啟接收郵件服務(wù)的復選框,并點擊鏈接"生成一個key",產(chǎn)生一個密鑰。
復制 rdm-mailhandler.rb 到你的郵件服務(wù)器, 確保該腳本有執(zhí)行的權(quán)限并配置你的郵件傳輸代理(MTA)。
rdm-mailhandler 用法:
rdm-mailhandler [options] --url=<Redmine URL> --key=<API key>必須選項:-u, --url Redmine服務(wù)的URL-k, --key Redmine API key常用可選選項:-h, --help 顯示幫助信息-v, --verbose 顯示額外的信息-V, --version 顯示版本信息
問題屬性可控的選項:
-p, --project=PROJECT 項目的標識符-t, --tracker=TRACKER 跟蹤標簽的類型--category=CATEGORY 問題類別的名稱--priority=PRIORITY 優(yōu)先級的名稱-o, --allow-override=ATTRS 允許在郵件里覆蓋先前已指定的屬性,多個屬性之間用逗號分開
示例:
# 沒有指定項目,那么在郵件內(nèi)容里必須包含“Project”關(guān)鍵字,否則Redmine將不處理該郵件rdm-mailhandler --url http://redmine.domain.foo --key secret# 設(shè)置默認的項目和跟蹤標簽類型,同時可以在郵件內(nèi)容里覆蓋tracker和priority選項rdm-mailhandler --url https://domain.foo/redmine --key secret \ --project foo \ --tracker 錯誤 \ --allow-override tracker,priority
下面是一個Postfix的例子:
foo: "|/path/to/rdm-mailhandler.rb --url http://redmine.domain --key secret --project foo"
redmine提供了一個rake任務(wù)(redmine:email:receive_imap)負責從IMAP服務(wù)器讀取郵件。
當cron 運行該rake命令時你需要使用選項 -f /path/to/redmine/appdir/Rakefile, 因為不這樣的話會出現(xiàn)找不到rakefile的異常。
下面是一個定期每30分鐘讀取一次郵件的cron文件:
*/30 * * * * redmineuser rake -f /path/to/redmine/appdir/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=imap.foo.bar username=redmine@somenet.foo password=xxx
如果你的設(shè)置正常工作,但經(jīng)常收到cron daemon發(fā)送的郵件,你可以在rake命令后添加 --silent選項禁止執(zhí)行命令的輸出信息。下面是禁止每次執(zhí)行cron命令時發(fā)送郵件的示例:
*/30 * * * * redmineuser rake -f /path/to/redmine/appdir/Rakefile --silent redmine:email:receive_imap RAILS_ENV="production" host=imap.foo.bar username=redmine@somenet.foo password=xxx
說明: 在 cron 文件中,這個命令必須位于一行上
如果用Windows作為服務(wù)器, pycron可以用于調(diào)度讀取郵件的任務(wù)。 同時需要你修改防火墻設(shè)置, 打開同通過TCP鏈接IMAP的143端口。
可用的IMAP選項:
host=HOST IMAP服務(wù)主機(*默認值: 127.0.0.1*)port=PORT IMAP服務(wù)端口(*默認值: 143*)ssl=SSL 是否使用SSL?(*默認值: false*)username=USERNAME IMAP賬號password=PASSWORD IMAP密碼folder=FOLDER 將要讀取的IMAP文件夾(*默認值: INBOX*)move_on_success=MAILBOX 將已成功讀取的郵件移動到MAILBOX中, 而不是刪除掉move_on_failure=MAILBOX 將Redmine忽略的郵件移動到MAILBOX中
問題(issue)屬性可控選項:
project=PROJECT 項目標識符tracker=TRACKER 跟蹤標簽類型category=CATEGORY 問題類別名稱priority=PRIORITY 優(yōu)先級名稱allow_override=ATTRS 允許在郵件內(nèi)容里覆蓋先前已指定的屬性,多個屬性之間用逗號隔開
rake命令的一個例子:
# 沒有指定項目, 這時郵件內(nèi)容里必須包含"Project"關(guān)鍵字rake redmine:email:receive_imap RAILS_ENV="production" \ host=imap.foo.bar username=redmine@somenet.foo password=xxx# 指定默認的項目和跟蹤標簽類型, 同時允許在郵件里覆蓋tracker和priority屬性的值# both tracker and priority attributes:rake redmine:email:receive_imap RAILS_ENV="production" \ host=imap.foo.bar username=redmine@somenet.foo password=xxx ssl=1 \ project=foo \ tracker=錯誤 \ allow_override=tracker,priority# 將成功處理的郵件轉(zhuǎn)移到"read"mailbox中,失敗的則轉(zhuǎn)移到"failed"mailbox中rake redmine:email:receive_imap RAILS_ENV="production" \ host=imap.foo.bar username=redmine@somenet.foo password=xxx \ move_on_success=read move_on_failure=failed
忽略的郵件(包括未知用戶、未知項目以及來自redmine禁用帳戶的郵件)被標記為'已讀',而不是從IMAP服務(wù)器中刪除。
選項 allow_override 不僅僅覆蓋rake的默認值, 而且可以覆蓋郵件里的所有屬性。 例如,你要覆蓋tracker, 你可以添加參數(shù): allow_override=tracker
僅在trunk和1.0以后的版本可用
redmine提供的rake任務(wù)(redmine:email:receive_pop3)可以用于從POP3讀取郵件
POP3可用的選項:
host=HOST POP3服務(wù)主機(*默認值: 127.0.0.1*) port=PORT POP3服務(wù)端口(*默認值: 110*) username=USERNAME POP3賬號 password=PASSWORD POP3密碼 apop=1 是否使用APOP認證(_默認值: false_) delete_unprocessed=1 從服務(wù)器上刪除不能成功處理的消息(*默認情況是繼續(xù)保存在服務(wù)器上*)關(guān)于問題屬性的可控選項可以參考上面IMAP章節(jié)
redmine提供的rake任務(wù)(redmine:email:receive)用于從標準輸入讀取單個的原始郵件
問題屬性可控的選項:
project=PROJECT 項目標識符tracker=TRACKER 跟蹤標簽類型category=CATEGORY 問題類別名稱priority=PRIORITY 優(yōu)先級名稱allow_override=ATTRS 允許在郵件內(nèi)容里覆蓋先前已指定的屬性,多個屬性之間用逗號隔開
示例:
# 沒有指定項目,這時郵件里必須包含“Project”關(guān)鍵rake redmine:email:read RAILS_ENV="production" < raw_email# 指定默認的項目和跟蹤標簽類型,并且允許在郵件里覆蓋tracker和priority選項# both tracker and priority attributes:rake redmine:email:read RAILS_ENV="production" \ project=foo \ tracker=錯誤 \ allow_override=tracker,priority < raw_email
選項 allow_override 不僅僅覆蓋rake的默認值, 而且可以覆蓋郵件里的所有屬性。 例如,你要覆蓋tracker, 你可以添加參數(shù): allow_override=tracker。
為了開啟該選項,需要添加額外參數(shù):
unknown_user=ACTION 當收到未知用戶郵件時,應(yīng)該采用哪種ACTION。以下是ACTION可用的值:ignore: 郵件將被忽略(默認值)accept: 作為匿名用戶接收create: 自動為該用戶創(chuàng)建一個賬號no_permission_check=1 當收到郵件時禁用權(quán)限檢查功能
收到郵件后, Redmine從發(fā)件人地址中查找對應(yīng)的賬號。 未知用戶和已鎖定的用戶將被忽略。
如果郵件主題包含像這樣的內(nèi)容" Re:[xxxxxx #123]", 那么該郵件將被作為問題(issue)#123的回復處理。
否則將會以郵件主題為問題的標題,新建一個問題(issue)
目標項目:
目標項目可以通過接收郵件里的project選項指定。 project應(yīng)該用項目的ID而不是項目的名稱來指定。
如果不使用該選項, 你需要在郵件內(nèi)容中指定問題關(guān)聯(lián)的項目。 你可以在郵件里添加這樣一行: "project:foo"。
例子(郵件內(nèi)容):
Project: foo在這里可以寫一些關(guān)于問題的描述信息
你可以給項目選項指定一個默認的項目并允許并允許用戶通過 allow_override 選項覆蓋默認的項目。
例子:
# 指定默認項目,并允許用戶在郵件里覆蓋project屬性rake redmine:email:receive_imap [...] project=foo allow_override=project
當然, 用戶的權(quán)限也會別檢查, 那些沒有創(chuàng)建問題(issue)的用戶發(fā)送的郵件將被忽略。
同時必須確保目標項目沒有使用沒有設(shè)定默認值的用戶自定義問題(issue)字段, 否則創(chuàng)建問題(issue)將會失敗。
問題(issue)屬性
根據(jù)你使用的接收郵件選項(參考 allow_override 選項), 用戶可以在提交問題(issue)時覆蓋一些屬性。
可以在郵件里用以下關(guān)鍵字實現(xiàn):Tracker, Category, Priority, Status。
例子:
# 這是一個新問題, 并將覆蓋一些屬性Project: fooTracker: 錯誤Priority: 緊急Status: 反饋
跟蹤者
如果發(fā)送郵件的用戶有"添加問題(issue)跟蹤者"的權(quán)限, 郵件中To或者Cc字段里的用戶將作為新建問題(issue)的跟蹤者
郵件格式以及附件
Redmine用郵件的純文本部分填充問題(issues)的描述, 因此當收到一個僅有HTML的郵件, 那些HTML標簽將被刪除。
郵件的附件將會自動附加給問題(issue), 除非超過了應(yīng)用程序設(shè)置的附件最大值。
以從IMAP服務(wù)器讀取郵件為例
添加一個Redmine從IMAP服務(wù)器讀取郵件的corn任務(wù)
wangsheng@pc01:/etc/cron.d$ cat receive_imap# m h dom mon dow user command*/10 * * * * root rake -f /opt/redmine/web/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=imap.foo.bar username=xxx@foo.bar password=xxxxxx allow_override=tracker
說明:
好了, 下面發(fā)送一個測試郵件:
收件人: rake里的username值
郵件標題:
# 這將是新建問題的標題這是通過郵件提交的問題
郵件內(nèi)容:
# 由于在rake命令里沒有指定默認項目,所以這里必須指定項目Project: fooTracker: 支持下面可以寫一些關(guān)于問題的描述
說明: 該郵件將會創(chuàng)建一個"支持"類型的問題(issue)
如果10分鐘內(nèi),你訪問Redmine, 點擊問題選項卡, 看到了這個問題, 那么證明已經(jīng)成功配置。
Redmine提供了一個rake任務(wù), 它可以發(fā)送那些未來幾天之內(nèi)需要完成的問題的提醒郵件。
可用選項:
下面是一個發(fā)送未來7天之內(nèi)需要解決的問題的提醒郵件示例, 問題的指派人將收到這封郵件:
rake redmine:send_reminders days=7 RAILS_ENV="production"
提醒郵件截圖.
Redmine一直以來都支持一個或者多個LDAP認證源。
以管理員身份登錄系統(tǒng), 點擊 管理 -> 配置 -> 認證 -> LDAP 認證, 即可進入LDAP認證頁面。
新建LDAP認證
在LDAP認證頁面, 點擊右上角的 新建認證模式 鏈接, 進入新建LDAP認證的頁面:
名稱
任意給你新建的LDAP起個名稱
主機
LDAP主機名稱, 也可以寫成LDAP主機的IP
端口
LDAP端口, 默認是 389
LDAPS
如果你想用LDAPS訪問LDAP目錄, 那么你需要選中它
賬號
如果LDAP服務(wù)允許匿名用戶訪問, 則不填; 否則需要填寫一個能訪問LDAP的用戶名
密碼
和上面的賬號一起設(shè)置
Base DN
LDAP目錄樹的頂級DN
即時用戶生成
選中該選項后, 任何LDAP用戶第一次登錄Redmine后, Redmine會將LDAP里"登錄名,名字,姓氏,郵箱地址"這些字段復制到Redmine的數(shù)據(jù)庫中, 從而為這些用戶創(chuàng)建了Redmine賬號。
屬性區(qū)域
在這里分別填寫LDAP的登錄屬性
一個典型的例子:
Name = My DirectoryHost = host.domain.orgPort = 389LDAPS = noAccount = MyDomain\UserName (or UserName@MyDomain depending on AD server)Password = <password>Base DN = CN=users,DC=host,DC=domain,DC=orgOn-the-fly user creation = yesAttributesLogin = sAMAccountNameFirstname = givenNameLastname = sNEmail = mail
創(chuàng)建之后頁面自動跳轉(zhuǎn)到LDAP認證頁面, 點擊"測試"鏈接測試你的設(shè)置設(shè)否能夠和LDAP服務(wù)器鏈接上
Note
Base DN 變種
如果鏈接失敗, 你可以將Base DN字段改為 "DC=host,DC=domian,DC=org"
LDAP屬性名稱大小寫敏感
新建LDAP截圖
前提
單點登錄配置步驟:
以管理員身份登錄Redmine, 點擊"管理"-->"配置"-->"認證", 進入認證配置頁面
在頁面的下方區(qū)域就是配置單點登錄的地方:
配置單點登錄截圖
單點登錄模式
選擇是否開啟單點登錄。 如果開啟, 你需要根據(jù)安裝Cosign的具體版本選擇合適的Cosign登錄模式。* 禁用 默認值* CoSign 3.x 登錄模式* CoSign 2.x 登錄模式
登錄URL
退出URL
單點登錄服務(wù)名
前提:
已經(jīng)配置好LDAP 參見 LDAP認證
操作步驟:
以管理員身份登錄Redmine, 點擊"管理"-->"配置"-->"認證"-->"LDAP認證(頁面右下角)", 進入LDAP認證頁面。
從LDAP同步賬號截圖
如果你已經(jīng)配置有LDAP認證, 你會發(fā)現(xiàn)在LDAP認證列表中有一個"從LDAP添加用戶"的鏈接, 點擊它, 將跳轉(zhuǎn)到 從LDAP添加用戶 的頁面:
上面是一個過濾器
在這里可以對用戶列表進行過濾。 比如你想查找用戶 zhangsan 可以這么做:
在過濾器的輸入框中輸入 uid=zhangsan, 點擊"應(yīng)用"按鈕, 這時用戶列表就僅有 zhangsan 一個人的用戶信息了。
下面是LDAP用戶信息列表
想要同步賬號, 只需點擊前面那個復選框, 然后點擊"同步賬號"按鈕, 系統(tǒng)將自動完成Redmine賬號的建立。
配置過程:
以管理員身份登錄Redmine, 選擇用Subversion作版本控制的項目, 點擊"配置"-->"版本庫", 進入版本庫配置頁面。
選擇Subverison, 這時你會發(fā)現(xiàn)多了兩個屬性:
授權(quán)文件
在這里輸入Subverion授權(quán)文件(svn.access)的全路徑。
授權(quán)模組名稱
輸入你想要通過Redmine瀏覽的項目(Subversion中每一個模組即代表一個項目)。
配置Subversion基于路徑授權(quán)截圖
Note
如果你用的是http協(xié)議,而且svn不允許匿名訪問,那么為了讓所有用戶都能有效地看到自己應(yīng)該看到的版本庫信息, 你需要創(chuàng)建一個對整個版本庫讀權(quán)限的賬號, 輸入到登錄名和密碼部分。 因為我們的Subverison權(quán)限檢查組件是在Redmine原來的基礎(chǔ)上, 對輸出的信息再次進行過濾。 所以如果你在這里輸入的賬號權(quán)限太低, 還是會出現(xiàn)一些高權(quán)限的用戶無法看到他們應(yīng)該看到的內(nèi)容的現(xiàn)象。