差異處
這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
tech:svnmantis1x [2018/03/26 07:46] – 建立 Jonathan Tsai | tech:svnmantis1x [2021/12/10 07:33] (目前版本) – jonathan | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Subversion 與 Mantis 1.x 整合作法 ====== | ||
+ | < | ||
+ | * 使用 Mantis 2.x 就無法在 core 目錄底下找到 checkin.php | ||
+ | * 需要改用 plugin - https:// | ||
+ | * 可以參考 [[tech/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== 目標 ===== | ||
+ | 當 Mantis 有張貼一個新的 Issue 時, 與這個 Issue 相關的 Subversion 更動紀錄可以自動回寫至 Mantis 這個 Issue 內的 Bug 筆記內. | ||
+ | |||
+ | 要達成這個目標,主要是撰寫一個 [[http:// | ||
+ | |||
+ | <cli> | ||
+ | <ditaa name=concept> | ||
+ | +--------+ | ||
+ | | SVN {d}| | SVN Server | | ||
+ | | Client |--> | ||
+ | | Commit | | ||
+ | +--------+ | ||
+ | | +-----+ | ||
+ | +-> | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | ===== - 相關環境 ===== | ||
+ | * Mantis 與 Subversion 都安裝在相同的主機上 或 **[[tech: | ||
+ | * Mantis 版本為 1.0.7 安裝在 / | ||
+ | * Subversion 版本為 1.4.3-1 | ||
+ | |||
+ | ===== - 設定程序 ===== | ||
+ | ==== - Mantis 建立特殊整合 user ==== | ||
+ | * 建立 svnbot 這個特殊的 userid | ||
+ | * 存取權限設定為**開發者** (如果有多個專案, | ||
+ | |||
+ | |||
+ | |||
+ | ==== - 設定 Mantis 的參數檔 ==== | ||
+ | <code php|h vi / | ||
+ | : | ||
+ | : | ||
+ | #Source Control | ||
+ | $g_source_control_account = ' | ||
+ | $g_source_control_regexp = '/ | ||
+ | $g_source_control_set_status_to = RESOLVED; | ||
+ | $g_source_control_set_resolution_to = FIXED; | ||
+ | $g_source_control_fixed_regexp = '/ | ||
+ | : | ||
+ | </ | ||
+ | * 設定 svnbot 為這個整合的 mantis 內特殊 user | ||
+ | * 只要 SubVersion 內的紀錄出現 bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記 | ||
+ | * 只要 SubVersion 內的紀錄出現 fixed 或 fixes + bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記外, 更會將 issue 狀態改成已修正解決 | ||
+ | ==== - 測試整合 Mantis ==== | ||
+ | 直接執行以下的命令, | ||
+ | < | ||
+ | php / | ||
+ | |||
+ | 或 | ||
+ | |||
+ | php / | ||
+ | </ | ||
+ | |||
+ | 直接執行以下的命令, | ||
+ | < | ||
+ | php / | ||
+ | |||
+ | 或 | ||
+ | |||
+ | php / | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | **如果這個步驟沒有正確在 Mantis 內出現新增的 Bug 筆記, 可能是這個專案並沒有給 svnbot 這個特殊使用者權限** | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== - Mantis 與 SVN 安裝在相同主機 ==== | ||
+ | === - 寫一段整合 Mantis 的 script === | ||
+ | * [[http:// | ||
+ | <code perl |h vi / | ||
+ | # | ||
+ | # | ||
+ | # 11:23 2008/4/30 | ||
+ | # Jonathan Tsai | ||
+ | # Ver 1.11 | ||
+ | # | ||
+ | # 自動將 svn 訊息寫入 mantis 紀錄內 | ||
+ | # | ||
+ | # 參考 https:// | ||
+ | # 本 script 需配合: | ||
+ | # 1. / | ||
+ | # 2.apache user 可使用 ssh 免密碼登入 Mantis 主機 <- SVN 主機與 Mantis 主機不同時需要 | ||
+ | # | ||
+ | # 1.00 (2007/3/26) 第一版啟用 | ||
+ | # 1.01 (2007/3/26) 增加 commit 後自動整合的說明 | ||
+ | # 1.10 (2007/6/22) 增加 遠端登入 Mantis 主機功能設定 | ||
+ | # 1.11 (2008/4/30) 增加第三個參數,當成 sshcmd 的外部設定(避免與 Source 混在一起) | ||
+ | # | ||
+ | |||
+ | $prgname = substr($0, rindex($0,"/" | ||
+ | $ver = "1.11 (2008/ | ||
+ | |||
+ | # 讀取參數資料 | ||
+ | $REPOS=$ARGV[0]; | ||
+ | $REV=$ARGV[1]; | ||
+ | # $sshcmd 設為空字串表示 SVN 與 Mantis 安裝在相同主機 | ||
+ | $sshcmd = defined($ARGV[2])?"/ | ||
+ | # 第三個參數為由 svn 主機免密碼登入 Mantis 主機的 ssh 命令參數 Exp. [email protected] -> $sshcmd = "/ | ||
+ | |||
+ | # 定義外部指令 | ||
+ | $svnlook = " | ||
+ | $phpcmd = "/ | ||
+ | $checkincmd = "/ | ||
+ | |||
+ | # 取得 svn 相關資訊 | ||
+ | $auth=`$svnlook author -r $REV $REPOS`; | ||
+ | $dt=`$svnlook date -r $REV $REPOS`; | ||
+ | $changed=`$svnlook changed -r $REV $REPOS`; | ||
+ | $log=`$svnlook log -r $REV $REPOS`; | ||
+ | $msg=" | ||
+ | |||
+ | # 傳送至 mantis | ||
+ | if (length($sshcmd)> | ||
+ | `$sshcmd $phpcmd -q $checkincmd <<< | ||
+ | } | ||
+ | else { | ||
+ | `$phpcmd -q $checkincmd <<< | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === - 測試執行 script === | ||
+ | * 假設 servercfg 的 svn 存放在 / | ||
+ | * 假設 servercfg 的 Reversion 644 訊息內容有出現 mantis #2 <- 表示整合至 Mantis Issue #2 | ||
+ | < | ||
+ | chmod a+x / | ||
+ | / | ||
+ | </ | ||
+ | * 這樣就可以看到 Mantis Issue #2 內新增一個 Bug 筆記, 內容如下: | ||
+ | < | ||
+ | Changeset [644] by jonathan | ||
+ | |||
+ | 2007-03-26 11:29:55 +0800 (一, 26 3月 2007) | ||
+ | |||
+ | 將 svnlook 命令前加入 LANG=zh_TW.UTF-8 來測試整合 mantis 中文訊息問題. | ||
+ | |||
+ | mantis#2 | ||
+ | |||
+ | U PD-920/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === - 設定 SVN Commit 後自動執行 svn2mantis.pl === | ||
+ | 如果有多個 svn repos 就在每個 repos 內依照這步驟一一執行, | ||
+ | < | ||
+ | cd / | ||
+ | cd hooks | ||
+ | </ | ||
+ | |||
+ | <code bash 1|h vi post-commit> | ||
+ | #!/bin/sh | ||
+ | |||
+ | REPOS=" | ||
+ | REV=" | ||
+ | |||
+ | / | ||
+ | </ | ||
+ | < | ||
+ | chown apache: | ||
+ | chmod a+x post-commit | ||
+ | </ | ||
+ | 這樣一但 commit 後, 會馬上執行這個 post-commit 的 shell script, 來執行 svn2mantis.pl 將 SVN 內的紀錄內容整合到 Mantis 的 Issue Bug 筆記內. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== - Mantis 與 SVN 在不同主機 ==== | ||
+ | === - 設定在 SVN 主機可以不用密碼登入 Mantis 主機 === | ||
+ | * SVN Server : 10.10.10.91 | ||
+ | * Mantis Server : 10.10.10.96 | ||
+ | * 假設 svn server 是與 httpd 整合, 透過 apache 執行 | ||
+ | * 先設定 SVN 主機內的 jonathan 帳號可以不用密碼以相同帳號登入 Mantis 主機 | ||
+ | * 再設定 SVN 主機內的 apache 帳號可以不用密碼以 jonathan 帳號登入 Mantis 主機 | ||
+ | == - SVN 主機 == | ||
+ | * 在 / | ||
+ | * 將公鑰複製到 Mantis 主機內改命名為 10.10.10.91_authorized_keys2 | ||
+ | < | ||
+ | su - jonathan | ||
+ | ssh 10.10.10.96 <- 輸入密碼確認可以登入 | ||
+ | exit <- 回到 svn 主機 | ||
+ | cd .ssh | ||
+ | ssh-keygen -d <- 產生 id_dsa.pub (詢問時均 Enter 跳下不輸入任何字元) | ||
+ | scp id_dsa.pub 10.10.10.96:/ | ||
+ | </ | ||
+ | |||
+ | == - Mantis 主機 == | ||
+ | * 將 SVN 主機公鑰加入認證公鑰清單檔內 | ||
+ | * 將認證公鑰清單檔權限設為只有自己可以讀寫 | ||
+ | < | ||
+ | su - jonathan | ||
+ | cd .ssh | ||
+ | cat 10.10.10.91_authorized_keys2 >> authorized_keys2 | ||
+ | chmod 600 authorized_keys2 | ||
+ | </ | ||
+ | |||
+ | == - 測試由 SVN 主機免密碼登入 Mantis 主機 == | ||
+ | * 先使用 jonathan 帳號登入 SVN 主機 | ||
+ | * 執行 ssh 10.10.10.96 就可以發現不需要密碼就可登入 Mantis 主機 | ||
+ | < | ||
+ | [jonathan@eddev ~]$ ssh [email protected] | ||
+ | Last login: Fri Jun 22 10:14:40 2007 from 10.10.10.91 | ||
+ | [jonathan@tryboxap04 ~]$ | ||
+ | </ | ||
+ | |||
+ | == - 設定 SVN 主機內的 apache 免密碼登入 Mantis 主機 == | ||
+ | * 登入 **SVN** 主機, 切換成 root | ||
+ | * 將上面設定的 / | ||
+ | < | ||
+ | su - | ||
+ | cd /var/www | ||
+ | cp -a ~jonathan/ | ||
+ | chown -R apache: | ||
+ | </ | ||
+ | |||
+ | === - 寫一段整合遠端 Mantis 的 script === | ||
+ | <note important> | ||
+ | * [[http:// | ||
+ | * 透過 svn 內的 hook/ | ||
+ | </ | ||
+ | |||
+ | === - 測試執行 script === | ||
+ | * 假設 moeaprj 的 svn 存放在 / | ||
+ | * 假設 moeaprj 的 Reversion 1700 訊息內容有出現 mantis #516 <- 表示整合至 Mantis Issue #516 | ||
+ | < | ||
+ | chmod a+x / | ||
+ | / | ||
+ | </ | ||
+ | * 這樣就可以看到 Mantis Issue #516 內新增一個 Bug 筆記, 內容如下: | ||
+ | < | ||
+ | Changeset [1700] by chou | ||
+ | |||
+ | 2007-06-20 12:09:04 +0800 (三, 20 6月 2007) | ||
+ | |||
+ | 更改發文查詢的本文含附件列印 mantis#516 | ||
+ | |||
+ | U EDOC2/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | === - 設定 SVN Commit 後自動執行 svn2mantis.pl === | ||
+ | 如果有多個 svn repos 就在每個 repos 內依照這步驟一一執行, | ||
+ | < | ||
+ | cd / | ||
+ | cd hooks | ||
+ | </ | ||
+ | |||
+ | <code bash |h vi post-commit> | ||
+ | #!/bin/sh | ||
+ | |||
+ | REPOS=" | ||
+ | REV=" | ||
+ | |||
+ | / | ||
+ | </ | ||
+ | < | ||
+ | chown apache: | ||
+ | chmod a+x post-commit | ||
+ | </ | ||
+ | 這樣一但 commit 後, 會馬上執行這個 post-commit 的 shell script, 來執行 [[http:// | ||
+ | |||
+ | |||
+ | ===== 參考資料 ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | {{tag> |