代碼發佈方案:php
1,安裝,優化 軟件環境,(nginx,lvs) 《-------運維工程師html
2,程序代碼(不斷更新)。 《--------開發工程師,(開發,運維均可以發佈)linux
3,配置變動(不斷變動)。 《--------運維工程師。nginx
1、版本控制管理工具SVN詳解git
1.1 什麼是SVN(subversion) ?web
SVN是近年來很是優秀的版本管理工具,與CSV管理工具同樣,SVN是一個跨平臺開元版本控制系統,可是SVN不同凡響的是,SVN會備份並記錄每一個文件每一次的修改更新變更。這樣咱們能夠把任意一個時間點檔案恢復到想要的某一箇舊版本,固然也能夠直接瀏覽指定文件的更新歷史記錄shell
SVN的相關站點:數據庫
1
2
3
4
|
http:
//subversion.tigris.org/
http:
//subversion.apache.org/
SVN客戶端:http:
//tortoisesvn.net/
SVN中文網站:http:
//svndoc.iusesvn.com/
|
目前爲止:常見的版本管理軟件有:vss,CVS,SVN,gitapache
1.1.2 SVN 與git的區別 ?vim
SVN是一個集中式數據管理中心,存在一箇中央版本庫,全部開發人員所使用的代碼都是來源於版本庫,提交代碼也是這個中央版本庫。
SVN版本控制系統工做流程:
a,在中央庫上建立或者從主幹複製一個分支
b,從中央庫check out下這個分支代碼
c,增長本身的代碼,修改,刪除代碼文件
d, commit 代碼。假設有人剛剛在分支提交了代碼,你就會被提醒代碼過時
你須要先update你的代碼,而後在提交。
優缺點:
當沒法鏈接到中央版本庫的環境下,你沒法提交代碼,將代碼加入版本控制。
你沒法查看代碼的歷史版本以及版本的變化過程。提交到版本控制系統的代碼咱們都默認經過自測可運行。若是某個模塊的代碼比較複雜,不能短期內實現可測試的功能,那麼須要更長時間提交本身的代碼,所以須要備份存儲作備份。這點分佈式的版本控制系統比較好點
SVN的備份要備份全部代碼數據以及全部更改的新版本記錄
1.1.2.2 git分佈式版本控制
git中沒有了中央分佈式,可是爲了開發小組的代碼共享,咱們一般仍是會搭建一個遠程git倉庫,從某種意義上說,本地的git和遠程的git倉庫沒有主從之分.
a.若是你本地建立一個git庫,並將其add到遠程git庫中
b,你在本地添加或者刪除文件,而後commit,固然commit操做都是提交到本地的git庫中了,(也就是提交到了本地git目錄的object目錄中去了)
c,將本地的git庫的分支push到遠程git庫的分支,若是這時候遠程git庫中,以及分別有了別人的push,那麼遠程git的分支不容許你push,到這個時候須要先pull,而後若是有衝突處理好衝突,commit到本地git,在push到遠程git庫
1.1.3 運維須要掌握的技術點:
a,安裝,部署,維護,排障
b,簡單應用,不少公司由開發來管理,包括創建新倉庫,添加,刪除帳號
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
1.2.0 svn服務運行方式與訪問方式
1.2.1 SVN服務端運行方式
SVN服務常見的運行訪問方式有3種:
a,獨立服務器訪問
訪問地址:SVN://svn.etiantian.org/sadoc
b,藉助Apache等http服務
訪問地址如: http://svn.etiantian.org/sadoc
b1,單獨安裝Apache+svn 不推薦,比較土
b2,csvn(apache+svn)是一個單獨的整合軟件,帶web界面管理的SVN軟件.
c,本地直接訪問
訪問方式file://application/svndata/sadoc 通常在SVN服務器本地使用
咱們主要以第一種和第二種的CSVN web 管理方式
1.2.1.1 SVN客戶端訪問方式
file:// 直接本地磁盤或者網絡磁盤訪問版本庫
http:// 經過webDAV 協議訪問subversion的Apache服務器
https:// 與http://類似,可是用ssl加密訪問
SVN:// 經過頭tcp/ip自定義協議訪問SVNsever
svn+ssh 經過認證加密tcp/ip自動以協議訪問SVNserver服務器,
|
1.3.1 SVN檔案庫數據格式
SVN存儲版本數據有2種方式:BDB(一種事務安全型表類型 berkley DB) ,FSFS(一種不須要數據庫的存儲系統)BDB方式在服務器中斷時候,可能鎖住數據,因此仍是FSFS方式更安全
FSFS 一個專門用於subversion版本庫的文件系統後端,可使用網絡文件 系統(NFS,SMBFS)
SVN是一個基於關係型數據庫BDB或者一系列二進制文件的FSFS
1.4.1 SVN集中式版本管理系統
SVN是一種集中式文件系統版本管理系統,集中式管理的工做流程以下圖
集中式代碼管理的核心是svn服務器,全部開發者新來的第一天必須從服務器獲取代碼,而後開發,最後解決衝突,提交,全部信息都放在svn服務器上。
1.4.2 開發者利用svn版本管理系統工做過程
舉例說明:
a,從svn服務器下載項目最新代碼。
b,進入本身的 分支,進行開發工做,每隔一段時間,提交一次,
c,下班時間,把本身的分支合併到服務器主分支上,一天的工做完成,並反映給服務器
缺點:
a,因爲每次提交都會有一個原始副本,所以svn數據庫容量會暴增
b,若是不能鏈接到svn服務器上,基本上不能夠工做
c,不適合開源系統開發,開發人數較多,可是集中式管理很是明確權限管理機制,能夠分層次管理
優勢:
a,管理方便,邏輯清晰,明確。
b,易於管理,集中式svn服務器更容易保證數據安全性
c,代碼一致性很是高
d,適合開發人數很少的項目開發
2.0安裝配置svn服務
2.0.1準備操做系統並查看系統環境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
[root@localhost ~]
# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@localhost ~]
# uname -r
2.6.32-431.el6.x86_64
[root@localhost ~]
# yum install subversion -y
[root@localhost ~]
# rpm -qa | grep subversion
subversion-1.6.11-15.el6_7.x86_64
[root@localhost ~]
# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
[root@localhost ~]
# grep keepcache /etc/yum.conf
keepcache=1 rpm包安裝後不清除
2.0.2配置並啓動svn
創建svn版本數據存儲根目錄svndata,用戶,密碼,權限目錄
[root@localhost ~]
# mkdir -p /application/svndata/ --數據存儲的根目錄
[root@localhost ~]
# mkdir -p /application/svnpasswd --用戶,密碼權限目錄
啓動svn服務,指定svn服務的根目錄
[root@localhost ~]
# svnserve -d -r /application/svndata/
[root@localhost ~]
# ps -ef | grep svn
root 1838 1 0 16:56 ? 00:00:00 svnserve -d -r
/application/svndata/
2.0.3 創建項目版本庫,而且配置版本庫
建立一個新的subversion項目sadoc,相似的這樣顯目能夠建立多個,並對於不一樣的代碼、
[root@localhost ~]
# svnadmin create /application/svndata/sadoc -建立一個新的項目
2.0.4 修改,調整svn配置文件以及權限文件
配置容許用戶wyb讀寫訪問
cd
/application/svndata/sadoc/conf
[root@localhost conf]
# cp svnserve.conf svnserve.conf.bak
[root@localhost conf]
# vim svnserve.conf
修改完以後以下
[root@localhost conf]
# grep -Ev "^#|^$" svnserve.conf
[general]
anon-access = none
auth-access = write
password-db =
/application/svnpasswd/passwd
authz-db =
/application/svnpasswd/authz
[sasl]
把密碼認證文件模塊複製到相關的目錄,這樣方便贊成管理
[root@localhost conf]
# ls /application/svnpasswd/
[root@localhost conf]
# cp passwd authz /application/svnpasswd/
[root@localhost conf]
# ls /application/svnpasswd/
authz
passwd
[root@localhost conf]
# ll /application/svnpasswd/
total 8
-rw-r--r-- 1 root root 1080 Oct 22 17:19 authz
-rw-r--r-- 1 root root 309 Oct 22 17:19
passwd
[root@localhost conf]
# chmod 700 /application/svnpasswd/*
[root@localhost conf]
# ll /application/svnpasswd/
total 8
-rwx------ 1 root root 1080 Oct 22 17:19 authz
-rwx------ 1 root root 309 Oct 22 17:19
passwd
[root@localhost conf]
#
新增用戶,密碼
提示:
1,等號前爲SVN帳號,等好後爲密碼,密碼是明晚,注意密碼權限700
2,更改svnserve.conf時候,須要重啓svn,更改authz,
passwd
文件時候不須要重啓svn
[root@localhost svnpasswd]
#vim passwd
[root@localhost svnpasswd]
# cat passwd
[
users
]
# harry = harryssecret
# sally = sallyssecret
wyb = 123456
zhiyan = zhiyan
[root@localhost svnpasswd]
#
[root@localhost svnpasswd]
# vim authz 權限配置文件
格式說明
版本庫目錄格式:
[<版本庫>:/項目/目錄]
@<用戶組名>=<權限>
<用戶名>=<權限>
[/] 表示根目錄。根目錄就是svnserver啓動時候,咱們制定的
/application/svndata
[/]就表示對所有版本庫設置權限
[repos:/] 表示對版本庫repository設置權限
[repos:
/sadoc
] 表示對版本庫repo中sadoc項目設置權限
[repos:
/sadoc/wyb
] 表示對版本庫repos中的sadoc項目的wyb目錄設置權限
權限主體能夠是用戶組,用戶,* ,用戶組前面加@,*表示所有用戶
權限能夠是w ,r,wr和 空表示沒有任何權限
authz 中每一個參數都要定格寫,開頭不能有空格
對於組,要以開頭@開頭,用戶不須要@開頭
[root@localhost svnpasswd]
#cat authz
新增部分
sagroup = wyb,zhiyan
[sadoc:/]
wyb = rw
zhiyan = r
@sagroup = r
注意:
* 權限配置文件中出現的用戶名必須是用戶配置文件中定義
* 對權限配置文件的修改當即生效,沒必要重啓svn
用戶格式
[
groups
]
其中,1個用戶組能夠包含1個或者多個用戶,用戶能夠逗號分隔。
此時svn安裝完畢
3.1 windows客戶端軟件tortoisesSVN
下載地址:http:
//tortoisesvn
.net
/downloads
.html
因爲目前安裝的是svn獨立訪問方式,因此svn客戶端連接服務器的方式以下
svn:
//192
.168.2.48
/sadoc
用戶名:gongli
密碼:123456
3.1.2 linux客戶端命令行使用說明
co checkout
up update
ci commit
3.1.2.1 從svn庫提取數據
a, 將文件checkout到本地目錄 Linux客戶端,是checkout ,而不是update
[root@localhost sadoc]
# mkdir /svndata
/svndata
---項目代碼下載到、
/svndata/
下
svn co svn:
//192
.168.2.48
/sadoc/
/svndata/
--username=gongli --password=123456
3.1.2.2-查看服務器端的數據
[root@localhost svndata]
# svn ls svn://192.168.2.48/sadoc/ --username=wyb --password=123456 -查看服務器端的數據
svn.txt
ww.txt
新建文本文檔.txt
[root@localhost svndata]
#
[root@localhost svndata]
# svn ls svn://192.168.2.48/sadoc/ --username=wyb --password=123456 --verbose
5 wyb Oct 23 10:59 ./
1 wyb 8011 Oct 23 09:49 svn.txt
4 wyb 0 Oct 23 10:37 ww.txt
5 wyb 0 Oct 23 10:59 新建文本文檔.txt
3.1.2.3 從本地提交到svn服務器
[root@localhost svndata]
# touch a.html
[root@localhost svndata]
# svn add a.html
A a.html
[root@localhost svndata]
# svn commit
svn: Commit failed (details follow):
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the
--message (-m) or --
file
(-F) options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are
set
, and no
'editor-cmd'
run-
time
configuration
option was found
[root@localhost svndata]
# svn commit -m "svn ci data"
Adding a.html
Transmitting
file
data .
Committed revision 6.
[root@localhost svndata]
#
[root@localhost svndata]
# svn ls svn://192.168.2.48/sadoc/ --username=wyb --password=123456 --verbose
6 wyb Oct 23 11:09 ./
6 wyb 0 Oct 23 11:09 a.html
1 wyb 8011 Oct 23 09:49 svn.txt
4 wyb 0 Oct 23 10:37 ww.txt
5 wyb 0 Oct 23 10:59 新建文本文檔.txt
|
###########################################################################################
2、svn hooks
1.1.1鉤子腳本:
寫法就是系統中shell腳本程序的寫法
當svn版本庫發生改變時候,hooks就會觸發相應做出執行命令 ,根據hooks輸出或者返回的狀態,hooks程序可以以某種方式執行該動做繼續執行,中止或者掛起、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-rw-r--r-- 1 root root 2780 Oct 22 17:05 start-commit.tmpl
[root@localhost hooks]
# pwd
/application/svndata/sadoc/hooks
[root@localhost hooks]
# ll
total 36
-rw-r--r-- 1 root root 1977 Oct 22 17:05 post-commit.tmpl
-rw-r--r-- 1 root root 1638 Oct 22 17:05 post-lock.tmpl
-rw-r--r-- 1 root root 2289 Oct 22 17:05 post-revprop-change.tmpl
-rw-r--r-- 1 root root 1567 Oct 22 17:05 post-unlock.tmpl
-rw-r--r-- 1 root root 3426 Oct 22 17:05 pre-commit.tmpl
-rw-r--r-- 1 root root 2410 Oct 22 17:05 pre-lock.tmpl
-rw-r--r-- 1 root root 2786 Oct 22 17:05 pre-revprop-change.tmpl
-rw-r--r-- 1 root root 2100 Oct 22 17:05 pre-unlock.tmpl
-rw-r--r-- 1 root root 2780 Oct 22 17:05 start-commit.tmpl
[root@localhost hooks]
#
|
對每種subversion版本庫支持的鉤子都有一個模板,經過查看這些腳本的內容,咱們能夠看到 的是什麼事件觸發了腳本以及如何給腳本傳遞數據
同時,這些模板也是如何使用這些腳本,結合subversion支持的工具來完成任務的例子。
要實際安裝一個可用的鉤子,你須要在repo/hooks 目錄下安裝一些與鉤子同名的可執行的程序或者腳本
注意:
因爲安全緣由,subversion版本庫在一個空環境中執行鉤子腳本就是沒有任何環境變量,甚至沒有$PATH或者%PATH% 因爲這個緣由,許多管理員會感到困惑, 他們的鉤子腳本手工運行時正常,能夠在subversion中卻不能運行。 要注意,必須在你的鉤子中設置好「環境變量」或者爲你的程序制定好「絕對路徑」
1.1.2 svn的hooks模板
1.1.2.1經常使用的鉤子腳本
post-commit 在提交完成成功建立版本以後執行該鉤子,提交已經完成,不可更改,所以,本腳本的返回值被忽略提交完成時候出發事務
pre-commit 提交完成觸發執行該腳本
start-commit
在客戶端尚未向服務器提交數據以前,即尚未創建 subversiontransaction以前執行該腳本
1.2 svn hooks生產環境應用場景舉例
pre-commit
限制上傳文件大小擴展名及大小,控制提交要輸入的信息等、
post-commit
svn 更新自動周知,MSN,郵件短信周知
svn更新觸發checkout程序,而後實時rsync送到服務器等
1.2.1 svn鉤子生產應用實戰。
案例一:rsync與svn鉤子結合實現數據同步某企業小案例
a,創建同步web目錄:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
[root@localhost hooks]
# mkdir -p /data/www
b,將svn中內容checkout到WEB目錄一份
[root@localhost www]
# svn co svn://192.168.2.48/sadoc /data/www/ --username=wyb --password=123456
[root@localhost www]
# ls
a.html b.html c.html svn.txt ww.txt
修改hooks腳本,進行同步
chmod
755
/application/svndata/sadoc/hooks/post-commit
[root@localhost svndata]
# more /application/svndata/sadoc/hooks/post-commit
#!/bin/bash
REPOS=
"$1"
REV=
"$2"
export
LC_CTYPE=
"en_US.UTF-8"
export
LC_ALL=
LOGPATH=
"app/log"
[! -d ${LOGPATH} ] &&
mkdir
${LOGPATH} -p
##update content from svn
SVN=
/usr/bin/svn
$SVN update --username wyb --password 123456
/data/www/
if
[ $? -
eq
0 ]
then
/usr/bin/rsync
-az --delete
/data/www/
/tmp/
fi
[root@localhost svndata]
# touch wwwwwwwwwwwwwwwww
[root@localhost svndata]
# svn add wwwwwwwwwwwwwwwww
A wwwwwwwwwwwwwwwww
[root@localhost svndata]
# svn commit -m "wwwwwwww"
Adding wwwwwwwwwwwwwwwww
Transmitting
file
data .
Committed revision 13.
[root@localhost svndata]
# svn ls svn://192.168.2.48/sadoc/ --username=wyb --password=123456 --verbose
13 wyb Oct 23 15:11 ./
9 wyb 15 Oct 23 11:34 a.html
12 wyb 0 Oct 23 15:09 asd.txt
7 wyb 0 Oct 23 11:28 b.html.txt
8 wyb 0 Oct 23 11:30 c.html.txt
11 wyb 0 Oct 23 15:08 hh.txt
1 wyb 8011 Oct 23 09:49 svn.txt
4 wyb 0 Oct 23 10:37 ww.txt
13 wyb 0 Oct 23 15:11 wwwwwwwwwwwwwwwww
[root@localhost svndata]
#
[root@localhost svndata]
# ls /tmp/
a.html asd.txt b.html.txt c.html.txt hh.txt svn.txt ww.txt wwwwwwwwwwwwwwwww
|
寫鉤子腳本的注意事項:
a,鉤子腳本的權限要容許svn執行,通常能夠設置 chmod 755 post-commit
b,鉤子腳本儘量定義環境變量,主要是用過的命令的路徑,由於svn考慮安裝的問題,不會調用系統環境變量,因此若是發現手動執行post-
commit沒有問題,可是自動還有可能沒法執行
c,這個筆記的案例腳本,在svn update以前先要手動checkout一份出來,還有儘量要加上用戶密碼,若是隻是手動同樣會更新,可是若是觸
發可能就會不能更新
#####################################################
SVN 遠程同步程序代碼到遠端的WEB服務器參考方法
方法一:http://biancheng.dnbcw.info/linux/345531.html
方法二:http://os.51cto.com/art/201410/454887.htm
#######################################################
案例二:
利用pre-commit 限制上傳文件擴展名及大小
.
.
.
.
.
.
.
.
.
###############################################################
代碼上線的解決方案,案例
1.1小型格式的代碼上線案例
1.2 中型企業上線解決方案:
1.3大型企業上線解決方案:
ITIL BSWx
集羣環境中分批更新
代碼上線解決方案注意事項:
1,上線的流程裏,辦公測試環境---》IDC測試環境----》正式生產環境,全部環境軟件版本均應統一,否咋後患無窮;
2,開發團隊小組辦公內部測試環境(該環境由開發小組維護,或者定時自動更新代碼),代碼有問題返回給某個開發人員
3,有專門的測試工程師,程序有問題直接返回給開發人員
4,IDC測試有測試和運維參與,叫IDCtest,進行程序壓力測試,有問題直接返回給開發人員。無問題上生產環境
5,數臺服務器代碼分發上線方案例子(Java程序)::::::
a,假設同業服務器有6臺,分爲2組,A組三臺,B組三臺,先對A進行平滑下線,B組正常提供服務,避免影響業務
b, 下線是經過腳本將A組的服務器從RS池(LVS,NGINX,HAPROXY,F5)等負載均衡器平滑提出,避免負載均衡器將請求送給
A組服務器,(此時在流量低峯期)