使用者工具

網站工具


tech:svnmantis

差異處

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

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
tech:svnmantis [2010/10/07 16:31]
jonathan
tech:svnmantis [2018/04/16 13:40] (目前版本)
Jonathan Tsai [參考資料]
行 1: 行 1:
 ====== Subversion 與 Mantis 整合作法 ====== ====== Subversion 與 Mantis 整合作法 ======
  
-===== 目標 =====+ 
 +===== 目標 =====
 當 Mantis 有張貼一個新的 Issue 時, 與這個 Issue 相關的 Subversion 更動紀錄可以自動回寫至 Mantis 這個 Issue 內的 Bug 筆記內. 當 Mantis 有張貼一個新的 Issue 時, 與這個 Issue 相關的 Subversion 更動紀錄可以自動回寫至 Mantis 這個 Issue 內的 Bug 筆記內.
  
-要達成這個目標,主要是撰寫一個 [[http://​svn.ichiayi.com/​opensvn/​opentrysoft/​trysrvtool/​svn2mantis.pl|svn2mantis.pl]] 整合 Subversion 內的 hook 與 Mantis 內的 checkin.php 來達成,可參考以下概念圖:​ +===== 相關環境 ===== 
- +  * Mantis 與 Subversion 都安裝在相同的主機上 
-<style box float-left>​ +  ​作業系統為 CentOS release 6.9 x86_64 
-<ditaa name=concept>​ +  * Mantis 版本為 ​2.8.安裝在 /​var/​www/​html/​mantis 
-+--------+ ​  /​------------\ ​                        /​----------------\ +  * Subversion 版本為 1.6.11-15 
-| SVN {d}|   | SVN Server |                         ​| ​ Mantis Server | +  * SVN 資料檔路徑 ​/var/www/svn/
-| Client |-->​| ​    ​+------+ ​   /-------=-------+ ​   +-------------+ ​ | +
-| Commit |   ​| ​    | hook +-=->+ svn2mantis.pl +-=->+ checkin.php |  | +
-+--------+ ​  ​\-----+------/ ​   +---------------/ ​   \-------+-----+--/​ +
-                                                            |  +-----+ +
-                                                            +->​|{s} ​ | +
-                                                               ​| ​    | +
-                                                               ​+-----+ +
-</​ditaa>​ +
-</​style>​ +
- +
-===== - 相關環境 ===== +
-  * Mantis 與 Subversion 都安裝在相同的主機上 ​或 **[[tech:​sshlogin|Subversion 主機可以透過 ssh 不需輸入密碼方式登入 Mantis 主機]]*+
-  * Mantis 版本為 ​1.0.安裝在 /​var/​www/​html/​mantis +
-  * Subversion 版本為 1.4.3-+
- +
-===== - 設定程序 ===== +
-==== - Mantis 建立特殊整合 user ==== +
-  * 建立 svnbot 這個特殊的 userid +
-  * 存取權限設定為**開發者** (如果有多個專, 每個專案都要授與 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>​ +
-  * 設定 svnbot 為這個整合的 mantis 內特殊 user +
-  * 只要 SubVersion 內的紀錄出現 bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記 +
-  * 只要 SubVersion 內的紀錄出現 fixed 或 fixes + bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記外, 更會將 issue 狀態改成已修正解決 +
-==== - 測試整合 Mantis ==== +
-直接執行以下的命令,​ 可以在 mantis 內的 Issue#2 新增 Bug 筆記 +
-<​file>​ +
-php /​var/​www/​html/​mantis/​core/​checkin.php <<<​ "Test issue #2 by svnbot."​ +
- +
-或 +
- +
-php /​var/​www/​html/​mantis/​scripts/​checkin.php <<<​ "Test issue #2 by svnbot."​ +
-</​file>​ +
- +
-直接執行以下的命令,​ 可以在 mantis 內的 Issue#2 新增 Bug 筆記以及將問題狀態更改為以解決 +
-<​file>​ +
-php /​var/​www/​html/​mantis/​core/​checkin.php <<<​ "Test fixed issue #2 by svnbot."​ +
- +
-或 +
- +
-php /​var/​www/​html/​mantis/​scripts/​checkin.php <<<​ "Test fixed issue #2 by svnbot."​ +
-</file>+
  
 <​note>​ <​note>​
-**如果這個步驟沒有正確在 Mantis 內出現新增的 Bug 筆記可能是這個專案並沒有給 svnbot 這個特殊使用者權限**+  ​因為 Mantis 2.x 無法在 core 目錄底下找到 checkin.php 
 +  * 需要改用 plugin - https://​github.com/​mantisbt-plugins/​source-integration 來整合 
 +  ​* 如果要參考之前紀錄請至 [[tech/​svnmantis1x]]
 </​note>​ </​note>​
  
 +===== 安裝 plugin - source-integration =====
 +  * 下載最新版 plugin <code sh>
 +cd /​var/​www/​html/​mantis/​plugins/​
 +wget https://​github.com/​mantisbt-plugins/​source-integration/​archive/​master.zip
 +unzip master.zip
 +rm master.zip
 +cd source-integration-master/​
 +cp -a Source ..
 +cp -a SourceSVN ..
 +</​code>​
  
-==== - Mantis 與 SVN 安裝在相同主機 ​==== +===== 設定程序 ===== 
-=== - 寫一段整合 ​Mantis ​的 script ​=== +===Mantis ​管理介面設定 ==== 
-  * [[http://svn.ichiayi.com/​opensvn/​opentrysoft/​trysrvtool/​svn2mantis.pl|點這裡直接下載 svn2mantis.pl 檔]] +  * 至 Mantis 管理->​管理套件->​可用的套件 安裝 ++看畫面|{{:​tech:2018032601.png|}}++ 
-<code perl |h vi /​var/​www/​svn2mantis.pl> +    * Source Control Integration 2.1.
-#​!/​usr/​bin/​perl +    * Source Subversion Integration 2.1.0 
-+  * 在 已安裝的套件 點 Source Control Integration 2.1.0 進行設定 
-# 11:23 2008/4/30 +    * 因為我習慣在 ​svn 說明內打 ​mantis#123 這樣的方式來表示對 ​#123 的問題進行更新,​ 所以會修改以下的 Regex ++看畫面|{{:tech:​2018032602.png|}}++ 
-# Jonathan Tsai +      * Bug Link Regex Pass /\b(?:​bug|issue|mantis)\s*[#]{0,1}(\d+)\b/i 
-# Ver 1.11 +      * Bug Fixed Regex Pass /\bfix(?:ed|es)\s+(?:​bug|issue|mantis)?\s*[#]{0,1}(\d+)\b/i 
-+    * 透過 <code sh>​openssl rand -hex 12 </code>​來產生 API Key (之後會用到
-# 自動將 ​svn 訊息寫入 ​mantis ​紀錄內 +    * 如果是自發憑證,​ 會出現檢核憑證失敗的問題,​ 此時需要先檢視憑證的 CN , 網址要定成這 CN 網址才能通過檢核 Exp. kvm-SVN -> https://kvm-SVN/repos/xxxx ++看畫面|{{:​tech:​2018032603.png|}}++ 
-# +    * 在左邊的選項會多出 Repositories ++看畫面|{{:tech:​2018032604.png|}}++ 
-# 參考 http://​www.ichiayi.com/​trywiki/​tech/​svnmantis ​說明方式 +      * 建立一對應 SVN 專案 Exp. erptools ++看畫面|{{:​tech:​2018032605.png|}}++ 
-本 script 需配合+      * 建立後輸入 SVN 的 URL Exp. https://kvm-SVN/repos/erptools (可先用正常的網址,​ 出現 https 憑證無法通過時,​ 再改用 https 憑證內的 CN 當網址, 記得在 ​/etc/hosts 內也要設定好) 
-#  ​1/var/​www/​svn/​xxxrepos/​hooks/​post-commit 一起使用 +      * 即使在 SVN: Command arguments 有指定 ​--config-dir 還是需要輸入 SVN Username / SVN Password
-#  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,"/"​)+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) { +  * 複製 post-commit.tmpl 到 SVN 專案 erptools 的 hooks 目錄內, 並改名為 post-commit <code sh
- `$sshcmd $phpcmd ​-q $checkincmd <<<​ "​$msg"​`;​ +cp -a /​var/​www/​html/​mantis/​plugins/​SourceSVN/​post-commit.tmpl /​var/​www/​svn/​erptools/​hooks/​post-commit 
-+chmod a+x /​var/​www/​svn/​erptools/​hooks/​post-commit
-else { +
- `$phpcmd ​-q $checkincmd <<<​ "​$msg"​`;​ +
-}+
 </​code>​ </​code>​
 +  * 修改 post-commit 內容符合實際環境 <code sh>
 +vi /​var/​www/​svn/​erptools/​hooks/​post-commit
 +</​code><​file>​
 +#!/bin/sh
  
 +# Copyright (c) 2012 John Reese
 +# Licensed under the MIT license
  
 +REV="​$2"​
  
-=== - 測試執行 script === +URL="http://localhost/mantis/plugin.php?​page=Source/checkin"​ 
-  * 假設 servercfg 的 svn 存放在 ​/var/www/svn/​servercfg +PROJECT="​erptools"​ 
-  * 假設 servercfg 的 Reversion 644 訊息內容有出現 ​mantis ​#2 <- 表示整合至 Mantis Issue #2 +API_KEY="​xxxxxxxxxxxxxxxx"​
-<​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)+LOG_FILE=`mktemp /​tmp/​svn_${PROJECT}_${REV}_log.XXX`
  
-將 svnlook 命令前加入 LANG=zh_TW.UTF-8 來測試整合 mantis 中文訊息問題.+CURL=/​usr/​bin/​curl
  
-mantis#2+${CURL} -d "​repo_name=${PROJECT}"​ -d "​data=${REV}"​ -d "​api_key=${API_KEY}"​ ${URL} >> ${LOG_FILE} 
 +</​file>​ 主要修改 
 +    * URL (Mantis 網址) 
 +    * API_KEY (在上面透過 openssl rand -hex 12 產生長度 24 的字串)
  
-U PD-920/​var/​www/​svn2mantis.pl +===== 測試整合 =====
-</​file>​+
  
- +  * 只要 SubVersion 內的紀錄出現 bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記 
- +  * 只要 SubVersion 內的紀錄出現 fixed 或 fixes + bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 Issue # Bug 筆記外, 更會將 issue 狀態改成已修正解決 
-=== - 設定 SVN Commit 後自動執行 svn2mantis.pl === +  ​* ​如果之前在 svn 內的 commit 描述出現 mantis# ​可以透過以下命令直接測試 Exp. svn#​325  ​ 
-如果有多個 svn repos 在每個 repos 內依照這步驟一一執行, ​以下還是以 servercfg 的 svn repos 為例 +<code sh
-<file+curl -d "​repo_name=erptools" ​-d "data=325"​ -d "​api_key=xxxxxxxxxxxxxxxxxxxxxxxx" "http://localhost/mantis/​plugin.php?​page=Source/​checkin"
-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>​ </​code>​
-<​file>​ +  * 結果如以下畫面
-chown apache:apache post-commit +    * 如果成功整合Repositories ​的 ChangesetsFiles, Issues 就會出現數值 \\ {{:​tech:​2018032606.png}} 
-chmod a+x post-commit +    * 點進去看 Changesets , 可以看到是否有對應到 Mantis ​的 Issue, 沒對應到也可以手動 Attach 上去 \\  {{:​tech:​2018032607.png}} 
-</​file>​ +    * 點到 Mantis 問題(Issue)頁面,​ 可以看到多一個 Related Changesets 項目, ​紀錄 ​SVN 整合到這 Issue 的訊息 \\  {{:​tech:​2018032608.png}}
-這樣一但 commit 後會馬上執行這個 post-commit ​的 shell script來執行 svn2mantis.pl 將 SVN 內的紀錄內容整合到 ​Mantis 的 Issue Bug 筆記內.+
  
- +<note
- +**如果這個步驟沒正確在 Repositories 的 Changesets 看到, 那就需要到 ​Server ​端 /tmp 查看 log 狀況**
- +
-==== - 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.1286440299.txt.gz · 上一次變更: 2010/10/07 16:31 由 jonathan