使用者工具

網站工具


tech:svnmantis

差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
tech:svnmantis [2018/03/26 16:40]
Jonathan Tsai
tech:svnmantis [2018/04/16 13:40] (目前版本)
Jonathan Tsai [參考資料]
行 10: 行 10:
   * Mantis 版本為 2.8.0 安裝在 /​var/​www/​html/​mantis   * Mantis 版本為 2.8.0 安裝在 /​var/​www/​html/​mantis
   * Subversion 版本為 1.6.11-15   * Subversion 版本為 1.6.11-15
 +  * SVN 資料檔案路徑 /​var/​www/​svn/​
  
 <​note>​ <​note>​
行 27: 行 28:
 cp -a SourceSVN .. cp -a SourceSVN ..
 </​code>​ </​code>​
 +
 +===== 設定程序 =====
 +==== Mantis 管理介面設定 ====
   * 至 Mantis 管理->​管理套件->​可用的套件 安裝 ++看畫面|{{:​tech:​2018032601.png|}}++   * 至 Mantis 管理->​管理套件->​可用的套件 安裝 ++看畫面|{{:​tech:​2018032601.png|}}++
     * Source Control Integration 2.1.0     * Source Control Integration 2.1.0
     * Source Subversion Integration 2.1.0     * Source Subversion Integration 2.1.0
   * 在 已安裝的套件 點 Source Control Integration 2.1.0 進行設定   * 在 已安裝的套件 點 Source Control Integration 2.1.0 進行設定
-    * 因為我習慣在 svn 說明內打 mantis#123 這樣的方式來表示對 #123 的問題進行更新,​ 所以會修改以下的 Regex+    * 因為我習慣在 svn 說明內打 mantis#123 這樣的方式來表示對 #123 的問題進行更新,​ 所以會修改以下的 Regex ++看畫面|{{:​tech:​2018032602.png|}}++
       * Bug Link Regex Pass 1 : /​\b(?:​bug|issue|mantis)\s*[#​]{0,​1}(\d+)\b/​i       * Bug Link Regex Pass 1 : /​\b(?:​bug|issue|mantis)\s*[#​]{0,​1}(\d+)\b/​i
       * Bug Fixed Regex Pass 1 : /​\bfix(?:​ed|es)\s+(?:​bug|issue|mantis)?​\s*[#​]{0,​1}(\d+)\b/​i       * Bug Fixed Regex Pass 1 : /​\bfix(?:​ed|es)\s+(?:​bug|issue|mantis)?​\s*[#​]{0,​1}(\d+)\b/​i
     * 透過 <code sh>​openssl rand -hex 12 </​code>​來產生 API Key (之後會用到)     * 透過 <code sh>​openssl rand -hex 12 </​code>​來產生 API Key (之後會用到)
-    * 如果是自發憑證,​ 會出現檢核憑證失敗的問題,​ 此時需要先檢視憑證的 CN , 網址要設定成這 CN 網址才能通過檢核 Exp. kvm-SVN -> https://​kvm-SVN/​repos/​xxxx +    * 如果是自發憑證,​ 會出現檢核憑證失敗的問題,​ 此時需要先檢視憑證的 CN , 網址要設定成這 CN 網址才能通過檢核 Exp. kvm-SVN -> https://​kvm-SVN/​repos/​xxxx ​++看畫面|{{:​tech:​2018032603.png|}}++ 
-    * +    * 在左邊的選項會多出 Repositories ++看畫面|{{:​tech:​2018032604.png|}}++ 
 +      * 建立一個對應 SVN 專案 Exp. erptools ++看畫面|{{:​tech:​2018032605.png|}}++ 
 +      * 建立後輸入 SVN 的 URL Exp. https://​kvm-SVN/​repos/​erptools (可先用正常的網址,​ 出現 https 憑證無法通過時,​ 再改用 https 憑證內的 CN 當網址, 記得在 /etc/hosts 內也要設定好) 
 +      * 即使在 SVN: Command arguments 有指定 --config-dir 還是需要輸入 SVN Username / SVN Password
  
- +==== 主機端設定 ==== 
-===== 設定程序 ===== +  * 複製 post-commit.tmpl 到 SVN 專案 ​erptools 的 hooks 目錄內並改名為 post-commit ​<​code ​sh> 
-==== - Mantis 建立特殊整合 user ==== +cp -a /​var/​www/​html/​mantis/​plugins/​SourceSVN/​post-commit.tmpl /var/www/svn/erptools/​hooks/​post-commit 
-  * 建立 svnbot 這個特殊的 userid +chmod a+/var/​www/​svn/​erptools/​hooks/​post-commit
-  * 存取權限設定為**開發者** (如果有多個專案, ​每個專案都要授與 svnbot 這個權限) +
- +
- +
- +
-==== 設定 Mantis 的參數檔 ==== +
-<​code ​php|h vi /​var/​www/​html/​mantis/​config_inc.php> +
-+
-+
-        #Source Control +
-        $g_source_control_account = '​svnbot';​ +
-        $g_source_control_regexp = '/\b(?:​bug|issue|mantis)\s*[#​]{0,​1}(\d+)\b/i'; +
-        ​$g_source_control_set_status_to = RESOLVED; +
-        $g_source_control_set_resolution_to = FIXED; +
-        $g_source_control_fixed_regexp = '/​\bfix(?:​ed|es)\s+(?:​bug|issue|mantis)?​\s*[#​]{0,​1}(\d+)\b/i'; +
-:+
 </​code>​ </​code>​
-  * 設定 svnbot 為這個整合的 mantis 內特殊 user +  * 改 post-commit 內容符實際環境 ​<code sh
-  * 只要 SubVersion 內的紀錄出現 bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記 +vi /var/www/svn/erptools/hooks/post-commit 
-  * 只要 SubVersion 內的紀錄出現 fixed 或 fixes + bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記外, 更會將 issue 狀態成已修正解決 +</code><file> 
-==== 測試整合 Mantis ==== +#!/bin/sh
-直接執行以下的命令,​ 可以在 mantis 內的 Issue#2 新增 Bug 筆記 +
-<file+
-php /var/www/html/mantis/core/checkin.php ​<<< "Test issue #2 by svnbot."​+
  
-+# Copyright (c) 2012 John Reese 
 +# Licensed under the MIT license
  
-php /​var/​www/​html/​mantis/​scripts/​checkin.php <<< ​"Test issue #by svnbot." +REV="$2"
-</​file>​+
  
-直接執行以下的命令,​ 可以在 mantis 內的 Issue#2 新增 Bug 筆記以及將問題狀態更改為以解決 +URL="​http:​//localhost/mantis/plugin.php?​page=Source/​checkin" 
-<​file>​ +PROJECT="​erptools"​ 
-php /var/www/html/mantis/core/​checkin.php <<< ​"Test fixed issue #2 by svnbot."+API_KEY="​xxxxxxxxxxxxxxxx"
  
-+LOG_FILE=`mktemp /​tmp/​svn_${PROJECT}_${REV}_log.XXX`
  
-php /var/www/html/​mantis/​scripts/​checkin.php <<<​ "Test fixed issue #2 by svnbot."​ +CURL=/usr/bin/curl
-</​file>​+
  
-<note+${CURL} -d "​repo_name=${PROJECT}"​ -d "​data=${REV}"​ -d "​api_key=${API_KEY}"​ ${URL} >> ${LOG_FILE} 
-**如果這個步驟沒有正確在 Mantis 內出現新增的 Bug 筆記, 可能是這個專案並沒有給 svnbot 這個特殊使用者權限** +</file主要修改 
-</​note>​+    URL (Mantis 網址) 
 +    ​API_KEY (上面透過 openssl rand -hex 12 產生長度 24 字串)
  
 +===== 測試整合 =====
  
-==== - Mantis 與 SVN 安裝在相同主機 ==== +  * 只要 SubVersion 內的紀錄出現 bug 或 issue 或 mantis #編號 表示整合 Mantis ​的 Issue # Bug 筆記 
-=== - 寫一段整合 Mantis 的 script === +  * 只要 SubVersion 內的紀錄出現 fixed 或 fixes + bug 或 issue 或 mantis ​#編號 表示整合 Mantis ​的 Issue Bug 筆記外, 更會將 issue 狀態改成已修正解決 
-  * [[http://​svn.ichiayi.com/​opensvn/​opentrysoft/​trysrvtool/​svn2mantis.pl|點這裡直接下載 svn2mantis.pl 檔]] +  * 如果之前在 svn 的 commit 描述有出現 mantis# 就可以透過以下命令直接測試 ​Exp. svn#​325 ​  
-<code perl |h vi /​var/​www/​svn2mantis.pl>​ +<code sh> 
-#​!/​usr/​bin/​perl +curl -d "​repo_name=erptools" ​-d "data=325" -"api_key=xxxxxxxxxxxxxxxxxxxxxxxx" "http://localhost/mantis/plugin.php?page=Source/​checkin"
-+
-# 11:23 2008/4/30 +
-# Jonathan Tsai +
-# Ver 1.11 +
-+
-# 自動將 svn 訊息寫入 mantis ​紀錄內 +
-# +
-# 參考 http://​www.ichiayi.com/​trywiki/​tech/​svnmantis 的說明方式 +
-# 本 script 需配+
-#  1. /​var/​www/​svn/​xxxrepos/​hooks/​post-commit 一起使用 +
-#  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($0rindex($0,"/"​)+1);​ +
-$ver = "1.11 (2008/​4/​30)";​ +
- +
-# 讀取參數資料 +
-$REPOS=$ARGV[0];​ +
-$REV=$ARGV[1];​ +
-# $sshcmd 設為空字串表示 SVN 與 Mantis 安裝相同主機 +
-$sshcmd = defined($ARGV[2])?"/​usr/​bin/​ssh "​.$ARGV[2]:"";​ +
-# 第三個參數為由 ​svn 主機免密碼登入 Mantis 主機的 ssh 命令參數 ​Exp. [email protected] -$sshcmd ​= "/​usr/​bin/​ssh jonathan\@10.10.10.96"+
- +
-# 定義外部指令 +
-$svnlook ​= "export LANG=zh_TW.UTF-8;/​usr/​bin/​svnlook"+
-$phpcmd ​= "/​usr/​bin/​php";​ +
-$checkincmd = "/var/www/html/mantis/core/​checkin.php"; +
- +
-# 取得 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="Changeset ["​.$REV."​] by $auth\n$dt\n$log\n$changed";​ +
- +
-# 傳送至 mantis +
-if (length($sshcmd)>​0) { +
- `$sshcmd $phpcmd -q $checkincmd <<<​ "​$msg"​`;​ +
-+
-else { +
- `$phpcmd -q $checkincmd <<<​ "​$msg"​`;​ +
-}+
 </​code>​ </​code>​
 +  * 結果如以下畫面:​
 +    * 如果成功整合,​ Repositories 的 Changesets, Files, Issues 就會出現數值 \\ {{:​tech:​2018032606.png}}
 +    * 點進去看 Changesets , 可以看到是否有對應到 Mantis 的 Issue, 沒對應到也可以手動 Attach 上去 \\  {{:​tech:​2018032607.png}}
 +    * 點到 Mantis 問題(Issue)頁面,​ 可以看到多一個 Related Changesets 項目, 紀錄 SVN 整合到這 Issue 的訊息 \\  {{:​tech:​2018032608.png}}
  
- +<note
- +**如果個步驟沒有正確在 Repositories ​的 Changesets 看到, 就需要到 ​Server ​端 /tmp 查看 log 狀況**
-=== - 測試執行 script === +
-  * 假設 servercfg 的 svn 存放在 /​var/​www/​svn/​servercfg +
-  * 假設 servercfg 的 Reversion 644 訊息內容有出現 mantis #2 <- 表示整合至 Mantis Issue #2 +
-<file+
-chmod a+x /​var/​www/​svn2mantis.pl +
-/​var/​www/​svn2mantis.pl /​var/​www/​svn/​servercfg 644 +
-</​file>​ +
-  ​這樣就可以看到 Mantis Issue #2 內新增一個 Bug 筆記, 內容如下:​ +
-<​file>​ +
-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/​var/​www/​svn2mantis.pl +
-</​file>​ +
- +
- +
- +
-=== - 設定 SVN Commit 後自動執行 svn2mantis.pl === +
-如果有多個 svn repos 就在每個 repos 內依照這步驟一一執行,​ 以下還是以 servercfg ​的 svn repos 為例 +
-<​file>​ +
-cd /​var/​www/​svn/​servercfg +
-cd hooks +
-</​file>​ +
- +
-<code bash 1|h vi post-commit>​ +
-#!/bin/sh +
- +
-REPOS="​$1"​ +
-REV="​$2"​ +
- +
-/​var/​www/​svn2mantis.pl "​$REPOS"​ "​$REV"​ +
-</​code>​ +
-<​file>​ +
-chown apache:​apache post-commit +
-chmod a+x post-commit +
-</​file>​ +
-這樣一但 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 主機 == +
-  * 在 /​home/​jonathan/​.ssh 內產生憑證與公鑰 +
-  * 將公鑰複製到 Mantis 主機內改命名為 10.10.10.91_authorized_keys2 +
-<​file>​ +
-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:/​home/​jonathan/​.ssh/​10.10.10.91_authorized_keys2 +
-</​file>​ +
- +
-== - Mantis 主機 == +
-  * 將 SVN 主機公鑰加入認證公鑰清單檔內 +
-  * 將認證公鑰清單檔權限設為只有自己可以讀寫 +
-<​file>​ +
-su - jonathan +
-cd .ssh +
-cat 10.10.10.91_authorized_keys2 >> authorized_keys2 +
-chmod 600 authorized_keys2 +
-</​file>​ +
- +
-== - 測試由 SVN 主機免密碼登入 Mantis 主機 == +
-  * 先使用 jonathan 帳號登入 SVN 主機 +
-  * 執行 ssh 10.10.10.96 ​可以發現不需要密碼就可登入 Mantis 主機 +
-<​file>​ +
-[[email protected] ~]$ ssh [email protected] +
-Last login: Fri Jun 22 10:14:40 2007 from 10.10.10.91 +
-[[email protected] ~]$ +
-</​file>​ +
- +
-== - 設定 SVN 主機內的 apache 免密碼登入 Mantis 主機 == +
-  * 登入 **SVN** 主機, 切換成 root  +
-  * 將上面設定的 /​home/​jonathan/​.ssh 目錄複製到 /var/www 內就可以 +
-<​file>​ +
-su - +
-cd /var/www +
-cp -a ~jonathan/​.ssh . +
-chown -R apache:​apache .ssh +
-</​file>​ +
- +
-=== - 寫一段整合遠端 Mantis 的 script === +
-<note important>​ +
-  * [[http://​svn.ichiayi.com/​opensvn/​opentrysoft/​trysrvtool/​svn2mantis.pl|svn2mantis.pl Ver 1.11 (2008/​4/​30)]] 之後就不區分遠端與 Local 版本,增加第三個輸入參數 (遠端 ssh 所需要的參數) +
-  ​透過 svn 內的 hook/​post-commit 直接指定 ssh 參數+
 </​note>​ </​note>​
  
-=== - 測試執行 script === 
-  * 假設 moeaprj 的 svn 存放在 /​var/​www/​svn/​moeaprj 
-  * 假設 moeaprj 的 Reversion 1700 訊息內容有出現 mantis #516 <- 表示整合至 Mantis Issue #516 
-<​file>​ 
-chmod a+x /​var/​www/​svn2mantis.pl 
-/​var/​www/​svn2mantis.pl /​var/​www/​svn/​moeaprj 1700 [email protected] 
-</​file>​ 
-  * 這樣就可以看到 Mantis Issue #516 內新增一個 Bug 筆記, 內容如下:​ 
-<​file>​ 
-Changeset [1700] by chou 
- 
-2007-06-20 12:09:04 +0800 (三, 20 6月 2007) 
- 
-更改發文查詢的本文含附件列印 mantis#516 
- 
-U EDOC2/​Source/​docsrv_html/​inc/​templates/​edrecvquery_2.inc.htm 
-</​file>​ 
- 
- 
-=== - 設定 SVN Commit 後自動執行 svn2mantis.pl === 
-如果有多個 svn repos 就在每個 repos 內依照這步驟一一執行,​ 以下還是以 moeaprj 的 svn repos 為例 
-<​file>​ 
-cd /​var/​www/​svn/​moeaprj 
-cd hooks 
-</​file>​ 
- 
-<code bash |h vi post-commit>​ 
-#!/bin/sh 
- 
-REPOS="​$1"​ 
-REV="​$2"​ 
- 
-/​var/​www/​svn2mantis.pl "​$REPOS"​ "​$REV"​ [email protected] 
-</​code>​ 
-<​file>​ 
-chown apache:​apache post-commit 
-chmod a+x post-commit 
-</​file>​ 
-這樣一但 commit 後, 會馬上執行這個 post-commit 的 shell script, 來執行 [[http://​svn.ichiayi.com/​opensvn/​opentrysoft/​trysrvtool/​svn2mantis.pl|svn2mantis.pl]] 將 SVN 內的紀錄內容整合到 Mantis 的 Issue Bug 筆記內. 
  
  
 ===== 參考資料 ===== ===== 參考資料 =====
-  * [[http://alt-tag.com/blog/archives/2006/11/integrating-mantis-and-subversion/​ | Integrating Mantis and Subversion]] +  * https://github.com/mantisbt-plugins/source-integration/blob/master/README.md 
-  * [[http://manual.mantisbt.org/manual.configuration.source.control.integration.php | Mantis 官方網站手冊-Source Control Integration]] +  * https://github.com/mantisbt-plugins/source-integration/​blob/master/​docs/​CONFIGURING.SourceSVN.md
-  * [[http://blog.ichiayi.com/​2007/​03/​26/​subversion-%e8%88%87-mantis-%e6%95%b4%e5%90%88%e4%bd%9c%e6%b3%95/​ | 針對這整合作法可在這邊討論]]+
  
-{{tag>​svn subversion mantis 密技}}+{{tag>類型:​軟體工程 狀態:​已發行 ​svn subversion mantis 密技}}
tech/svnmantis.1522053636.txt.gz · 上一次變更: 2018/03/26 16:40 由 Jonathan Tsai