使用者工具

網站工具


tech:svnmantis

差異處

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

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
下次修改 Both sides next revision
tech:svnmantis [2007/11/12 13:24]
jonathan
tech:svnmantis [2018/03/26 17:52]
Jonathan Tsai [參考資料]
行 1: 行 1:
 ====== Subversion 與 Mantis 整合作法 ====== ====== Subversion 與 Mantis 整合作法 ======
-<​html>​ 
-<div class="​toc"><​script language="​JavaScript"​ src="​http://​funp.com/​pages/​tools/​button.php?"​ type="​text/​javascript"></​div></​script>​ 
-</​html>​ 
-===== - 目標 ===== 
-當 Mantis 有張貼一個新的 Issue 時, 與這個 Issue 相關的 Subversion 更動紀錄可以自動回寫至 Mantis 這個 Issue 內的 Bug 筆記內. 
  
-===== - 相關環境 ===== 
-  * Mantis 與 Subversion 都安裝在相同的主機上 或 **[[tech:​sshlogin|Subversion 主機可以透過 ssh 不需輸入密碼方式登入 Mantis 主機]]** 
-  * Mantis 版本為 1.0.7 安裝在 /​var/​www/​html/​mantis 
-  * Subversion 版本為 1.4.3-1 
  
-===== - 設定程序 ​===== +===== 目標 ​===== 
-==== - Mantis ​建立特殊整合 user ==== +當 Mantis ​有張貼一的 Issue 時, 與這個 ​Issue 相關的 Subversion 更動紀錄可以自動回寫至 Mantis 這個 Issue 內的 Bug 筆記內.
-  * 建立 svnbot 這特殊的 userid +
-  * 存取權限設定為**開發者** (如果有多個專案每個專案都要授與 svnbot ​這個權限)+
  
- +===== 相關環境 ​===== 
-==== - 設定 Mantis 的參數檔 ​==== +  * Mantis 與 Subversion 都安裝在相同主機上 
-<file|vi /​var/​www/​html/​mantis/​config_inc.php>​ +  * 作業系統為 CentOS release 6.9 x86_64 
-+  * Mantis ​版本為 2.8.0 安裝在 /​var/​www/​html/​mantis 
-+  * Subversion 版本為 1.6.11-15 
-        #Source Control +  * SVN 資料檔案路徑 ​/var/www/svn/
-        $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';​ +
-+
-</​file>​ +
-  * 設定 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." +
-</​file>​ +
- +
-直接執行以下的命令,​ 可以在 mantis 內的 Issue#2 新增 Bug 筆記以及將問題狀態更改為以解決 +
-<​file>​ +
-php /var/www/html/​mantis/​core/​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 ​管理介面設定 ==== 
-<code perl vi /​var/​www/​svn2mantis.pl> +  * 至 Mantis 管理->​管理套件->​可用的套件 安裝 ++看畫面|{{:​tech:​2018032601.png|}}++ 
-#​!/​usr/​bin/​perl +    * Source Control Integration 2.1.0 
-# +    * Source Subversion Integration 2.1.0 
-# 上午 11:15 2007年6月22日 +  * 在 已安裝的套件 點 Source Control Integration 2.1.0 進行設定 
-# Jonathan Tsai +    * 因為我習慣在 ​svn 說明內打 ​mantis#123 這樣的方式來表示對 ​#123 的問題進行更新,​ 所以會修改以下的 Regex ++看畫面|{{:tech:​2018032602.png|}}++ 
-# Ver 1.10 +      * Bug Link Regex Pass : /\b(?:​bug|issue|mantis)\s*[#]{0,1}(\d+)\b/i 
-+      * Bug Fixed Regex Pass : /\bfix(?:ed|es)\s+(?:​bug|issue|mantis)?​\s*[#]{0,1}(\d+)\b/i 
-# 自動將 ​svn 訊息寫入 ​mantis ​紀錄內 +    * 透過 <code sh>​openssl rand -hex 12 </code>​來產生 API Key (之後會用到
- +    * 如果是自發憑證,​ 會出現檢核憑證失敗的問題,​ 此時需要先檢視憑證的 CN , 網址要定成這 CN 網址才能通過檢核 Exp. kvm-SVN -> https://kvm-SVN/repos/xxxx ++看畫面|{{:​tech:​2018032603.png|}}++ 
-# 參考 http://​www.ichiayi.com/​trywiki/​tech/​svnmantis ​說明方式 +    * 在左邊的選項會多出 Repositories ++看畫面|{{:​tech:​2018032604.png|}}++ 
-本 script 需配合: +      * 建立一個對應 SVN 專案 Experptools ++看畫面|{{:​tech:​2018032605.png|}}++ 
-#  1/​var/​www/​svn/​xxxrepos/​hooks/​post-commit 一起使用 +      * 建立後輸入 SVN 的 URL Exphttps://kvm-SVN/repos/erptools (可先用正常的網址,​ 出現 https 憑證無法通過時,​ 再改用 https 憑證內的 CN 當網址, 記得在 ​/etc/hosts 內也要設定好) 
-#  2.apache user 可使用 ssh 免密碼登入 Mantis 主機 <- SVN 主機與 Mantis 主機不同時需要 +      * 即使在 SVN: Command arguments 有指定 ​--config-dir 還是需要輸入 SVN Username / SVN Password
-+
-1.00 (2007/3/26第一版啟用 +
-# 1.01 (2007/3/26增加 commit 後自動整合的說明 +
-1.10 (2007/6/22增加 遠端登入 Mantis 主機功能設定 +
-# +
- +
-$prgname = substr($0, rindex($0,"/"​)+1); +
-$ver = "1.10 (2007/6/22)"; +
-# $sshcmd ​為空字串表示 ​SVN 與 Mantis 安裝在相同主機 +
-$sshcmd = "";​ +
-# 否則應該輸入由 svn 主機免密碼登入 Mantis 主機的命令列 +
-#$sshcmd = "/usr/bin/ssh [email protected].10.10.96"; ​ +
- +
-# 讀取參數資料 +
-$REPOS=$ARGV[0];​ +
-$REV=$ARGV[1];​ +
- +
-# 定義外部指令 +
-$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
  
- 
-=== - 測試執行 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|vi post-commit>​ 
-#!/bin/sh 
- 
-REPOS="​$1"​ 
 REV="​$2"​ REV="​$2"​
  
-/var/www/svn2mantis.pl "$REPOS" "$REV" +URL="​http:​//localhost/mantis/​plugin.php?​page=Source/​checkin" 
-</​code>​ +PROJECT="erptools" 
-<​file>​ +API_KEY="​xxxxxxxxxxxxxxxx"
-chown apache:​apache post-commit +
-chmod a+x post-commit +
-</​file>​ +
-這樣一但 commit 後, 會馬上執行這個 post-commit 的 shell script, 來執行 svn2mantis.pl 將 SVN 內的紀錄內容整合到 Mantis 的 Issue Bug 筆記內.+
  
 +LOG_FILE=`mktemp /​tmp/​svn_${PROJECT}_${REV}_log.XXX`
  
-==== - Mantis 與 SVN 在不同主機 ==== +CURL=/usr/bin/curl
-=== - 設定在 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 主機 ​=+${CURL} -d "​repo_name=${PROJECT}"​ -d "data=${REV}" ​-d "​api_key=${API_KEY}"​ ${URL} ​>> ​${LOG_FILE} 
-  * 將 SVN 主機公鑰加入認證公鑰清單檔內 +</​file> ​主要修改 
-  * 將認證公鑰清單檔權限設為只有自己可以讀寫 +    * URL (Mantis 網址) 
-<file> +    * API_KEY (在上面透過 openssl rand -hex 12 產生長度 24 的字串)
-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 主機 == +  * 只要 SubVersion ​內的出現 bug 或 issue 或 mantis #編號 表示整合 Mantis 內的 ​Issue Bug 筆記 
-  * 登入 **SVN** 主機, 切換成 root  +  ​* 只要 SubVersion 內的紀錄出現 fixed 或 fixes + bug 或 issue 或 mantis ​#編號 表示整合 ​Mantis 內的 Issue Bug 筆記外更會將 issue 狀態改成已修正解決 
-  * 將上面設定的 /​home/​jonathan/​.ssh 目複製到 /var/www 內就可以 +  * 如果之前在 svn 的 commit 描述有出現 mantis# 就可以透過以下命令直接測試 Expsvn#325  ​ 
-<​file>​ +<code sh> 
-su - +curl -d "​repo_name=erptools" -"data=325" ​-d "api_key=xxxxxxxxxxxxxxxxxxxxxxxx" ​"http://localhost/mantis/plugin.php?page=Source/​checkin"
-cd /var/www +
-cp -a ~jonathan/​.ssh . +
-chown -R apache:​apache .ssh +
-</​file>​ +
- +
-=== - 寫一段整合遠端 ​Mantis ​的 script === +
-<code perl|vi /​var/​www/​svn2mantis.pl>​ +
-#​!/​usr/​bin/​perl +
-+
-# 上午 11:15 2007年6月22日 +
-# Jonathan Tsai +
-# Ver 1.10 +
-+
-# 自動將 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 主機功能設定 +
-+
- +
-$prgname = substr($0rindex($0,"/"​)+1);​ +
-$ver = "1.10 (2007/​6/​22)";​ +
-# $sshcmd 設為空字串表示 SVN 與 Mantis 安裝相同主機 +
-#$sshcmd = "";​ +
-# 否則應該輸入由 ​svn 主機免密碼登入 Mantis 主機的命令列 +
-$sshcmd = "/​usr/​bin/​ssh [email protected].10.10.96";​  +
- +
-讀取參數資料 +
-$REPOS=$ARGV[0];​ +
-$REV=$ARGV[1];​ +
- +
-# 定義外部指令 +
-$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>​
 +  * 結果如以下畫面:​
 +    * {{:​tech:​2018032606.png}}
 +    * {{:​tech:​2018032607.png}}
 +    * {{:​tech:​2018032608.png}}
  
- +<note
- +**如果個步驟沒有正確在 Repositories 的 Changesets 看到那就需要到 Server 端 /tmp 查看 log 狀況** 
-=== - 測試執行 script === +</note>
-  * 假設 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 +
-</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|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 筆記內. +
  
  
  
 ===== 參考資料 ===== ===== 參考資料 =====
-  * [[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]}}+
  
-~~BOOKMARKME:​on~~+{{tag>​svn subversion mantis 密技}}
tech/svnmantis.txt · 上一次變更: 2018/04/16 13:40 由 Jonathan Tsai