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