差異處

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

連向這個比對檢視

下次修改
前次修改
tech:svnmantis1x [2018/03/26 15:46] – 建立 Jonathan Tsaitech:svnmantis1x [2021/12/10 15:33] (目前版本) jonathan
行 1: 行 1:
 +====== Subversion 與 Mantis 1.x 整合作法 ======
  
 +<note>
 +  * 使用 Mantis 2.x 就無法在 core 目錄底下找到 checkin.php
 +  * 需要改用 plugin - https://github.com/mantisbt-plugins/source-integration 來整合
 +  * 可以參考 [[tech/svnmantis]]
 +</note>
 +
 +
 +===== 目標 =====
 +當 Mantis 有張貼一個新的 Issue 時, 與這個 Issue 相關的 Subversion 更動紀錄可以自動回寫至 Mantis 這個 Issue 內的 Bug 筆記內.
 +
 +要達成這個目標,主要是撰寫一個 [[http://svn.ichiayi.com/opensvn/opentrysoft/trysrvtool/svn2mantis.pl|svn2mantis.pl]] 整合 Subversion 內的 hook 與 Mantis 內的 checkin.php 來達成,可參考以下概念圖:
 +
 +<cli>
 +<ditaa name=concept>
 ++--------+   /------------\                         /----------------\
 +| SVN {d}|   | SVN Server |                          Mantis Server |
 +| Client |-->    +------+    /-------=-------+    +-------------+  |
 +| Commit |       | hook +-=->+ svn2mantis.pl +-=->+ checkin.php |  |
 ++--------+   \-----+------/    +---------------/    \-------+-----+--/
 +                                                            |  +-----+
 +                                                            +->|{s}  |
 +                                                                   |
 +                                                               +-----+
 +</ditaa>
 +</cli>
 +===== - 相關環境 =====
 +  * Mantis 與 Subversion 都安裝在相同的主機上 或 **[[tech:sshlogin|Subversion 主機可以透過 ssh 不需輸入密碼方式登入 Mantis 主機]]**
 +  * Mantis 版本為 1.0.7 安裝在 /var/www/html/mantis
 +  * Subversion 版本為 1.4.3-1
 +
 +===== - 設定程序 =====
 +==== - 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>
 +**如果這個步驟沒有正確在 Mantis 內出現新增的 Bug 筆記, 可能是這個專案並沒有給 svnbot 這個特殊使用者權限**
 +</note>
 +
 +
 +==== - Mantis 與 SVN 安裝在相同主機 ====
 +=== - 寫一段整合 Mantis 的 script ===
 +  * [[http://svn.ichiayi.com/opensvn/opentrysoft/trysrvtool/svn2mantis.pl|點這裡直接下載 svn2mantis.pl 檔]]
 +<code perl |h vi /var/www/svn2mantis.pl>
 +#!/usr/bin/perl
 +#
 +# 11:23 2008/4/30
 +# Jonathan Tsai
 +# Ver 1.11
 +#
 +# 自動將 svn 訊息寫入 mantis 紀錄內
 +#
 +# 參考 https://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($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) {
 + `$sshcmd $phpcmd -q $checkincmd <<< "$msg"`;
 +}
 +else {
 + `$phpcmd -q $checkincmd <<< "$msg"`;
 +}
 +</code>
 +
 +
 +
 +=== - 測試執行 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>
 +[jonathan@eddev ~]$ ssh [email protected]
 +Last login: Fri Jun 22 10:14:40 2007 from 10.10.10.91
 +[jonathan@tryboxap04 ~]$
 +</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>
 +
 +=== - 測試執行 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]]
 +  * [[http://manual.mantisbt.org/manual.configuration.source.control.integration.php | Mantis 官方網站手冊-Source Control Integration]]
 +  * [[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 密技}}