在linux服務器上裝svn版本管理,自動部署代碼到項目


在linux服務器上裝svn版本管理,自動部署代碼到項目

http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw3X&pos=1 

http://v5sheji.com/archives/setupsvnonlinux.html

 

1.安裝svn服務器端 

yum install subversion   

從鏡像下載安裝svn服務器端 

中間會提示是否ok,輸入y,確認 
安裝成功提示:.....complete! 
依次執行如下命令: 

cd /usr/local/              //進入目錄,准備創建svn目錄 
 
mkdir svnRepo                   //創建一個svn目錄 
 
chmod -R 777 svnRepo            //修改目錄權限為777 
 
svnadmin create /usr/local/svnRepo/first  //創建一個svn版本倉庫first(first可以隨便起名字) 
 
cd first/conf               //進入first版本倉庫下的配置文件目錄 

2.下面要修改這個目錄下的三個配置文件 

 (1) svnserve.conf    //配置版本庫信息和用戶文件和用戶密碼文件的路徑、版本庫路徑 

anon-access = none       //默認是只讀read
auth-access = write      //認證后有寫入權限
password-db = passwd     //帳號密碼配置文件
authz-db = authz         //權限配置文件
realm = first            //改成自己的版本庫 生效范圍
             

(2) authz     //文件,創建svn組和組用戶的權限 

 
[group]  
first = ddl,shl       //創建一個first的組,並制定兩個用戶ddl和shl 
 
[/]                   //制定根目錄下的權限 
@first = rw           //first組用戶權限為讀寫  
* = r                 //其他用戶只有讀權限 

(3) passwd   //創建或修改用戶密碼 

[users] 
 
ddl = 123456    //用戶名 = 密碼  
shl = 123456    //。。。 

3.然后要設置自啟動 

 打開自啟動文件  /etc/rc.local      

#!/bin/sh 
# 
# This script will be executed *after* all the other init scripts. 
# You can put your own initialization stuff in here if you don't 
# want to do the full Sys V style init stuff. 
 
touch /var/lock/subsys/local 

添加下面一行 

svnserve -d -r /usr/local/svnRepo/first 

svn命令: 

lsof -i :3690   查看svn是否啟動 
 
ps aux |grep 'svn'  查找所有svn啟動的進程 
 
kill -9 2505    殺死2505這個查找到的svn進程 
 
svnserve -d -r /usr/local/svnRepo/first 啟動svn(可以把這個放到/etc/local/rc.local文件中,實現開機自啟動)

netstat -anp|grep svnserve查看一下SVN信息

SVN版本庫起動方式,現在svnRepo下面有 first、test 兩個版本庫  

1:單版本庫起動    svnserve -d -r /usr/local/svnRepo/first 
2:多版本庫起動    svnserve -d -r /usr/local/svnRepo 
區別在於起動svn時候的命令中的啟動參數-r指定的目錄。 
 
4.限制不同的用戶對不同的版本庫操作權限

修改版本庫中的conf目錄下的 authz文件 
以配置 first 版本庫為例:
 
authz 

[groups] 
 
company = user1,user2 
 
[first:/]             //指定版本庫跟目錄下的權限 
 
@company = rw     //company組用戶權限為讀寫 
 
* = r           //其他用戶只有讀權限 

passwd 設置組中用戶的賬號和密碼 

[users] 
 
user1  = 123456  
user2 = 123456 

5.客戶端訪問 

假設客戶端使用tortoiseSVN 
打開資源庫瀏覽器輸入地址, svn://你的svn服務器ip:3690 
輸入用戶名ddl 密碼12345 
因為沒有網資源庫里放文件所以需要你用客戶端右鍵【create forder】,然后【add forder】

6.使用post-commit實現自動部署

 搭建svn都不是僅僅為了把代碼存到倉庫,而是同步部署到對應的項目。

在 svn 目錄的 /hooks里面有一堆tmpl,這些tmpl可以做很多事情,不過今天我們就說一下自動部署post-commit.tmpl

tmpl文件是模版文件,我們要用post-commit需要手動復制對應tmpl里面的內容到新的post-commit里面

cp post-commit.tmpl post-commit

step.1:

然后打開文件清空內容,修改為以下代碼:

#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password **** /var/www/test

其中第一行意思是:用sh來解析這個腳本,因為各種shell的語法有細微的差別

第二行是編碼格式:這里我使用的是UTF-8

最后一行/usr/bin/svn 是svn的路徑,不是項目路徑,應該都是一樣的,后半句分別是用戶名密碼、和項目路徑--username這個比較坑了,網上搜出來的很多都搞錯了,前面其實是兩個減號,英文輸入法下的。

step.2:

修改post-commit的可執行權限

chmod 755 post-commit

step.3:

在服務器進入項目目錄/var/www/test checkout 整個項目。

注意此處不要checkout文件夾,正確代碼應該是這樣:

svn checkout svn://{您的服務器地址}:{端口號}/test .   //注意目錄后面還有一個點

注意:此處的/test 可不需要添加:( 添加的目的是為了實現多個項目。 )

svn checkout svn://{您的服務器地址}:3690 . //注意目錄后面還有一個點

至此,如果按照此步驟搞下來,應該已經沒有問題了,你可以本地commit代碼,自動同步到項目了。

6.常見錯誤,我遇到的

  1. 255錯誤:post-commit沒有給執行權限 或者 頭部沒有執行用sh執行,就是沒有#!/bin/sh
  2. 提示跳過目錄:服務器目錄沒有checkout代碼,記得一定要先checkout一次,才能同步(!,每次新建項目都需要)
  3. 什么提示也沒有:這種情況出現在用工具commit的時候,成功了,但是就是沒有同步,建議你到linux下,使用./post-commit手動執行看報什么錯誤。如果亂碼,請將文件內編碼格式修改為GBK
  4. 提示**** is a direcitory:/usr/bin/svn你把這個搞錯了,他不是一個目錄,是svn的路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM