svn服務實戰應用指南 linux
1.1 svn介紹程序員
什麼是svn? web
svn(sub-version)是近年來崛起的很是優秀的版本管理工具,與cvs管理工具同樣,svn是一個跨平臺的開源的版本控制系統,svn版本管理工具管理者隨時間改變的各類數據shell
這些數據放置在一箇中央資料檔案庫中,這個檔案庫很像一個普通的文件服務器或者ftp服務器,可是,不同凡響的是,svn會備份並記錄每一個文件每一次的修改更新變更,這樣咱們就能夠把任意一個時間點的檔案恢復到想要的某一箇舊的版本(回滾),固然也能夠直接瀏覽制定文件的更新歷史記錄數據庫
爲何會有svn這樣的一個項目apache
官方解釋:爲了接管cvs的用戶基礎 windows
svn是一個很是通用的軟件系統,它常被用來管理程序源碼,可是它也能夠管理任何類型的文件,如文本,視頻,圖片等等安全
svn相關站點:服務器
http://www.iusesvn.com/ svn中文網站架構
http://tortoisesvn.net svn客戶端
svn 集中式版本控制系統
svn版本控制系統是集中式的數據管理,存在一箇中央版本庫,全部開發人員本地開發所使用的代碼都是來自於這個版本庫,提交代碼也都必須提交到這個中央版本庫
svn版本控制系統工做流程以下:
缺點:
當沒法鏈接到中央版本的環境下,你沒法提交代碼,將代碼加入版本控制,你沒法看到代碼的歷史版本以及版本的變化過程,提交到版本控制系統中的代碼咱們都默認經過自測可運行的,若是某個模塊的代碼比較複雜,不能短期內實現
爲可測的功能,那麼你須要等很長的時間才能提交本身的代碼,因爲代碼集中管理,所以,須要對中央版本庫的存儲作備份,這點分佈式的版本控制系統要好一些,svn的備份要備份全部代碼數據以及全部更改的版本記錄
企業應用場景
svn還是當前企業的主流,運維人員須要掌握的技術點:
運維人員掌握版本管理
1) 安裝、部署、維護、排障
2) 簡單使用,不少公司都由開發來管理,包括創建倉庫和添加和刪除帳號
3) 對於版本控制系統,運維人員至關於開發商,開發人員是業主,運維搭建的系統爲開發人員服務的
svn服務端運行方式3種
svn客戶端的訪問方式
訪問方式 |
說明 |
file:// |
直接經過本地磁盤訪問 |
http:// |
經過webdav協議訪問 |
svn:// |
經過tcp/ip自定義協議訪問 |
svn+ssh |
經過認證並加密的方式 |
Svn檔案庫數據格式:
Svn存儲版本數據有2種方式:BDB(一種事物安全型表類型)和FSFS(一種不須要數據庫的存儲系統),由於BDB方式在服務器中斷時,有可能鎖住數據,因此仍是fsfs方式更安全一點
BDB 是1.2版本之前的默認數據格式
FSFs是1.2版本以後的默認數據格式
Svn是基於關係數據庫或一系列二進制文件的,一方面解決了許多問題(例如:並行讀寫共享文件)以及添加了許多新功能(例如:運行時的事物特性)然而另外一方面,數據存儲由此變得不透明,不能像ftp,nfs等能看到實體文件了
Svn 版本系統邏輯架構圖原理圖
客戶端----[http|svn|local] ------svnserver接口------svn版本庫-------後臺管理[bdb|fsfs]
略。。。
集中式代碼管理的核心是svn服務器,全部開發者在開始新一天的工做以前必須從服務器獲取代碼,而後進行開發,最後解決衝突、提交全部的版本信息都放在svn服務器上,所以若是脫離了服務器,開發者就沒法進行提交代碼工做
開發者利用svn版本管理系統工做流程:
開始新的一天的工做:
缺點:
優勢:
2.1 安裝配置svn服務
準備操做系統並查看系統環境
Centos6.6 64位系統
內核 2.6.32
安裝svn
究竟是編譯安裝仍是yum安裝?
編譯,yum or rpm
通常,輔助性的軟件用yum安裝,重量級的軟件用編譯
首先yum安裝
[root@hd3 ~]# yum -y install subversion
注意:yum安裝rpm包安裝後本地不清除的方法
[root@hd3 ~]# sed -i "s#keepcache=0#keepcache=1#g" /etc/yum.conf
[root@hd3 ~]# grep keepcache /etc/yum.conf
keepcache=1
2.1.3 配置並啓動svn
創建svn版本系統數據存儲根目錄
mkdir –p /application/svndata
mkdir –p /application/svnpasswd
啓動svn服務並指定服務的svn根目錄
svnserve –d –r /application/svndata/
-d --daemon 表示以守護進程(後臺方式,一直運行)的方式啓動程序
-r 表示指定數據存儲的目錄
檢查查看進程
ps –ef |grep svn
查看端口
netstat –lntup|grep 3690
lsof –i :3690
2.1.4 創建項目版本庫
建立一個新的subversion 項目 sadoc ,其實,相似sadoc這樣的項目能夠建立多個,每一個項目都是獨立的
svnadmin help 查看建立項目的幫助
svnadmin help create 表示建立新項目的幫助信息
例如:
svnadmin create /application/svndata/sadoc
表示建立一個新的項目sadoc(版本庫)
tree /application/svndata/sadoc
表示查看sadoc項目中的內容
2.15 調整svn配置文件及權限提高
配置容許用戶
cd /application/svndata/sadoc/conf
authz 權限管理文件
passwd 用戶和密碼配置文件
svnserve.conf 配置文件
下面編輯配置文件
vi svnserve.conf 修改 注意要頂格寫
12 anon-access = none
13 auth-access = write
20 password-db = /application/svnpasswd/passwd
27 authz-db = /application/svnpasswd/authz
利用diff比較源文件和修改以後文件
將模版文件拷貝到相關目錄下
cp passwd authz /application/svnpasswd/
修改權限
cd /application/svnpasswd/
chmod 700 *
vi passwd 添加帳號
[users]
zhangsan = 123456
gongli = gongli
提示:
等號前是用戶名,等號後面是svn密碼
更改svnserve.conf時,須要重啓svn服務,其餘文件不用
authz 權限的配置文件
格式說明:
用戶組格式:
[groups]
= ,
其中1個用戶組能夠包含1個或多個用戶,用戶中間以逗號分隔。
版本庫目錄格式:
[版本庫:/項目/項目]
@用戶名 = 權限 #表示設置組的權限
用戶名 = 權限 #單個用戶的權限設置
/ ,表示根目錄及如下,咱們指定爲/application/svndata就是表示對所有版本庫設置權限
[repos:/] 表示對版本庫repos設置權限
[repos:/sadoc]表示對版本庫中的sadoc項目設置權限
[repos:/sadoc/oldboy]表示對版本庫repos中的sadoc項目的oldboy目錄設置權限
權限能夠是w ,r,wr和空,空表示沒有任何權限
authz中每一個參數都要頂格寫
案例:
vi authz 修改配置文件
sagroup = zhangsan,gongli
[sadoc:/]
zhangsan = rw
gongli = r
@sagroup = r
注意:權限文件裏的用戶必須在passwd中定義
重啓svn
reload 服務中 從新加載配置文件
pkill svnserve,
svnserve –d –r /application/svndata/
ps –ef|grep svn
客戶端軟件TORTOISE SVN
svn 客戶端鏈接服務器的方式,帳號及密碼
svn://192.168.1.13/sadoc
用戶名:zhangsan
密碼: 123456
安裝完svn客戶端以後,在本地建立一個目錄svndata,鼠標點擊右鍵 選擇 svn check out 以後出現一個窗口,調整一下訪問地址,以及本地的目錄路徑,點擊ok,輸入用戶名和密碼
點擊肯定 就ok了
1 checkout下載svn服務器上的資源
2 輸入正確的svn服務器的路徑
3.輸入帳號和密碼
4.提交修改後的代碼文檔
把一個代碼文件放在建立的目錄裏svndata ,而後選擇右鍵 svn commit 進行提交
若是想查看到底服務器上有沒有更新,怎麼辦 ?
右鍵 選擇 tortoiseSVN -----》repo-browser
到此svn部署成功了 !
按期下載
當svn有內容的時候,第二次更新的時候,變成svn update
>>按期上傳 svn內容
紫色:提交一個新增項
藍色:提交一個修改
深紅:提交一個刪除或替換
黑色:其餘
>>刪除svn的內容
在本地刪除文檔,而後點擊svn commit 將服務器上的文檔也刪除
>>查看svn目錄或者歷史版本
點擊右鍵tortoiseSVN -----》show log
linux做爲svn 客戶端命令的使用
1. 將文件checkput 到本地目錄(從svn庫提取數據到本地)
例如:
在本地建立一個目錄 /data
svn co svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456
說明:co表示下載 checkout的縮寫
和windows客戶端同樣 第二次下載就是update了
[root@hd3 ~]# svn up svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456
若是出現不支持utf-8說明 linux客戶端的字符集有問題
解決方法:
調整字符集
export LC_CTYPE=’en_US.UTF-8’
export LC_ALL=
調整secure-crt的編碼
>> 查看svn庫中的數據
[root@hd3 sadoc]# svn list svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456 --verbose
9 zhangsan Mar 07 19:20 ./
5 zhangsan 164 Mar 07 2015 clone.sh
Linux做客戶端
>> 從本地提交數據到svn服務器
cd /data #進入本地svn目錄
touch a b c # 建立abc三個文件
svn add a b c #定義須要提交的文檔
svn ci –m 「svn ci data」 #提交數據ci表示提交 –m表示解釋說明
2.1 svn 鉤子腳本簡介
鉤子腳本的具體寫法就是操做系統中shell腳本程序的寫法,可根據本身的svn所在的操做系統和shell程序進行相應的開發
鉤子腳本就是被某些版本庫事件觸發的程序,例如:建立新版本或者修改未被版本控制的屬性,每一個鉤子都能掌管足夠多的信息來了解發生了什麼事件,操做對象是什麼,以及觸發事件用戶的帳號。
根據鉤子的輸出或者返回狀態,鉤子程序可以以某種方式控制該動做繼續執行,中止或者掛起
默認狀況下,鉤子的子目錄中包含各類版本庫鉤子模版
cd /application/svndata/sadoc/hooks
要使用一個鉤子,去掉模版的擴展名
重要提示:
鉤子腳本,手動執行能夠,可是放在subservision 中卻不能執行,緣由是沒有設置鉤子的路徑或環境變量
svn版本系統中鉤子種類及功能介紹
鉤子腳本 |
說明 |
post-commit |
在提交完成成功創建版本以後執行該鉤子,提交已經完成,不可更改所以,本腳本的返回值被忽略,提交完成時觸發事武 |
pre-commit |
提交完成前觸發該腳本 |
|
|
2.2 鉤子生產應用場景舉例
pre-commit
post-commit
2.3 svn鉤子生產應用實戰
2.3.1 rsync 與svn鉤子結合實現數據實時同步企業案例
需求:svn數據一更新,就要同步到/data/www目錄
1.創建同步web站點 /data/www
2.svn co svn://10.0.0.17/sadoc /data/www –username=zhangsan –password=123456
3. cp post-commit.tmpl post-commit
4. 修改post-commit 腳本文件內容以下
logpath=’/app/log’ [ ! –d ${logpath} ] && mkdir ${logpath} –p SVN=/usr/bin/svn $SVN update –username zhangsan –password 123456 /data/www if [ $? –eq 0 ] then /usr/bin/rsync –az –delete /data/www /tmp/ fi
注意:1)鉤子腳本的權限chmod 755 ,2)腳本內容中的命令儘可能是絕對路徑
企業案例邏輯圖
開發人員------》svn服務器-------》推送給web服務器(極簡版圖)
利用pre-commit限制擴展名或者大小