本文詳細(xì)講述了在Ubuntu上通過SVN進(jìn)行業(yè)務(wù)部署。由于使用Apache服務(wù)模塊的的實(shí)現(xiàn)和使用不同,本文的方案僅適用于ubuntu,如在其他環(huán)境下,請(qǐng)酌情部署。
創(chuàng)新互聯(lián)長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為岐山企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作,岐山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。本文介紹在代碼提交時(shí)通過http訪問SVN服務(wù)器,使用Mysql進(jìn)行用戶驗(yàn)證,并在提交完成后自動(dòng)部署至服務(wù)器中。
主要步驟如下:
1、 安裝Apache和Mysql:
執(zhí)行
$ sudo apt-get install apache2 mysql-server
執(zhí)行
$ sudo /etc/init.d/apache2 start
訪問http://127.0.0.1,測(cè)試apache是否安裝成功。如遇到端口沖突,可能是由于安裝了其他的web服務(wù)器(如Nginx)占用了80端口所引起的,可以修改相應(yīng)配置文件,換用其它端口。
2、 安裝subversion及對(duì)應(yīng)Apache的服務(wù)器模塊和MySQL用戶認(rèn)證管理模塊:
$ sudo apt-get install subversion libapache2-svnlibapache2-mod-auth-mysql
$ sudo a2enmod auth_mysql
3、 創(chuàng)建subversion項(xiàng)目和版本庫
可以將所有的版本庫放置在一個(gè)目錄下,如/var/www/svn,可以自定義。
$ sudo mkdir /var/www/svn
然后可以創(chuàng)建兩個(gè)版本庫,如/var/www/svn/repos、/var/www/svn/repos1。
先創(chuàng)建兩個(gè)文件夾
$ sudo mkdir /var/www/svn/repos
$ sudo mkdir /var/www/svn/repos1
然后再執(zhí)行svnadmin命令創(chuàng)建兩個(gè)倉庫,注意使用--fs-type來指定創(chuàng)建fsfs版本庫,默認(rèn)情況下是創(chuàng)建Berkeley DB版本庫
$ sudo svnadmin create /var/www/svn/repos --fs-type fsfs
$ sudo svnadmin create /var/www/svn/repos1 --fs-type fsfs
最后賦予www-data用戶這些版本庫的讀寫權(quán)限,因?yàn)橥ㄟ^apache服務(wù)器部署時(shí)需要讀寫該文件夾
$ sudo chown -Rwww-data /home/www/svn/repos
$ sudo chown -Rwww-data /home/www/svn/repos1
4、 創(chuàng)建用戶驗(yàn)證數(shù)據(jù)庫
創(chuàng)建進(jìn)行用戶驗(yàn)證的數(shù)據(jù)庫
$ mysql -u root -p
#創(chuàng)建一個(gè)數(shù)據(jù)庫,用于進(jìn)行用戶驗(yàn)證
mysql> CREATE DATEBASE svn;
#使用該數(shù)據(jù)庫
mysql> USE svn;
#創(chuàng)建一個(gè)用戶表,包含name,password和groups這三列,且名字為主鍵
mysql> CREATE TABLE user (
name char(30) NOT NULL COMMENT \'用戶名\',
passwd char(32) NOT NULL COMMENT \'密碼\',
groups varchar(32) NOT NULL COMMENT ‘群組’,
PRIMARY KEY (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> INSERT INTO user VALUE (\'admin\', MD5(\'admin\'),’admin’);
mysql> INSERT INTO user VALUE (\'test\', MD5(\'test\'),’test’);
需注意以下幾點(diǎn):
密碼域一定要足夠?qū)?,本文將使用MD5密碼(32字節(jié)),如果使用SHA1,則需要40字節(jié)。
必須設(shè)置groups字段,可以默認(rèn)為其用戶名,這樣可以保證當(dāng)使用mysql進(jìn)行用戶驗(yàn)證時(shí),可以在apache的配置文件中指定群組,只有特定群組的人才能夠訪問該代碼庫,防止其他用戶訪問。
5、 編輯虛擬主機(jī)的配置文件
可以更改/etc/apache2/sites-available/default文件至如下:
<VirtualHost *:80>
#指定了管理者的郵箱,可以不寫
ServerAdmin admin@svn.com
#每一個(gè)Location指定了url為該種情況下的該指向哪個(gè)文件,如當(dāng)url
#為htip://10.23.0.240/project時(shí),對(duì)應(yīng)的SVN路徑為下邊SVNPath指
#定的路徑/var/www/svn/repos,具體可以參見svn配置文檔
#http://svndoc.iusesvn.com/svnbook/1.4/
<Location /project>
DAV svn
SVNPath /var/www/svn/repos
AuthType Basic
AuthName "SubversionRepository"
AuthBasicAuthoritative off
#指定apache通過mysql進(jìn)行驗(yàn)證開啟
Auth_MySQL on
Auth_MySQL_Authoritative on
#指定mysql服務(wù)器的地址為localhost
Auth_MySQL_Host localhost
#指定進(jìn)行驗(yàn)證的數(shù)據(jù)庫為svn;
Auth_MySQL_DB svn
#指定mysql svn數(shù)據(jù)庫的用戶名
Auth_MySQL_User root
#指定mysql svn數(shù)據(jù)庫的密碼,本倉庫中為root
Auth_MySQL_Password root
#指定mysql進(jìn)行驗(yàn)證的數(shù)據(jù)庫表
Auth_MySQL_Password_Tableuser
Auth_MySQL_Empty_Passwordsoff
Auth_MySQL_Encrypted_Passwordson
#指定進(jìn)行驗(yàn)證的用戶名的表中用戶名的字段,本倉庫為name
Auth_MySQL_Username_Fieldname
#指定進(jìn)行驗(yàn)證的用戶名的表中密碼的字段,本倉庫為passwd
Auth_MySQL_Password_Fieldpasswd
#指定進(jìn)行驗(yàn)證的用戶名的表中密碼的加密方式,本倉庫為PHP_MD5
Auth_MySQL_Encryption_TypesPHP_MD5
#指定需要進(jìn)行組驗(yàn)證,對(duì)于本版本庫需要該用戶的組為admin
require group admin
</Location>
#同理,該location指定了訪問的url為htip://10.23.0.240/project1
#時(shí),對(duì)應(yīng)的路徑為/var/www/svn/repos1。
<Location /project1>
DAV svn
SVNPath /var/www/svn/repos1
AuthType Basic
AuthName "SubversionRepository"
AuthBasicAuthoritative off
#指定apache通過mysql進(jìn)行驗(yàn)證開啟
Auth_MySQL on
Auth_MySQL_Authoritative on
#指定mysql服務(wù)器的地址為localhost
Auth_MySQL_Host localhost
#指定進(jìn)行驗(yàn)證的數(shù)據(jù)庫為svn;
Auth_MySQL_DB svn
#指定mysql svn數(shù)據(jù)庫的用戶名
Auth_MySQL_User root
#指定mysql svn數(shù)據(jù)庫的密碼,本倉庫中為root
Auth_MySQL_Password root
#指定mysql進(jìn)行驗(yàn)證的數(shù)據(jù)庫表
Auth_MySQL_Password_Tableuser
Auth_MySQL_Empty_Passwordsoff
Auth_MySQL_Encrypted_Passwordson
#指定進(jìn)行驗(yàn)證的用戶名的表中用戶名的字段,本倉庫為name
Auth_MySQL_Username_Fieldname
#指定進(jìn)行驗(yàn)證的用戶名的表中密碼的字段,本倉庫為passwd
Auth_MySQL_Password_Fieldpasswd
#指定進(jìn)行驗(yàn)證的用戶名的表中密碼的加密方式,本倉庫為PHP_MD5
Auth_MySQL_Encryption_TypesPHP_MD5
#指定需要進(jìn)行組驗(yàn)證,對(duì)于本版本庫需要該用戶的組為test
require group test
</Location>
</VirtualHost>
需要注意,本文假設(shè)用戶admin上傳了project,而用戶test上傳了project1,因此配置兩個(gè)不同的location以進(jìn)行訪問,且每一個(gè)版本庫對(duì)應(yīng)一個(gè)項(xiàng)目。為了同一個(gè)組的用戶能訪問到該組的所有代碼,因此配置了require group選項(xiàng)。
6、 啟用SVN配置
重新加載配置,以使得配置生效
$sudo /etc/init.d/apache2 reload
在瀏覽器中輸入http://127.0.0.1/project,輸入用戶名admin,密碼admin,可以訪問該版本庫repos1的最新版本。使用svn客戶端,如TortoiseSVN時(shí),版本庫的地址為http://10.23.0.240/project1/(本svn服務(wù)器端部署在10.23.0.240機(jī)器上)。然后輸入用戶名admin,密碼admin即可checkout。
在瀏覽器中輸入http://127.0.0.1/project1,輸入用戶名test,密碼test,可以訪問該版本庫repos2的最新版本。
7、war文件進(jìn)行自動(dòng)部署至tomcat服務(wù)器下
可以通過修改每個(gè)項(xiàng)目的版本庫中hooks文件夾下的post-commit鉤子,來方便的進(jìn)行自動(dòng)部署。該鉤子其實(shí)就是一個(gè)shell腳本,用于當(dāng)上傳完畢之后執(zhí)行的。注意,此shell腳本為了保證安全,不能使用環(huán)境變量。
本腳本以repos為例,repos1同理更改相應(yīng)位置即可
$cd /var/www/svn/repos
#復(fù)制原來的示例文件,并且改名為post-commit
$cp post-commit.tmpl post-commit
$vim post-commit
然后修改post-commit文件的內(nèi)容如下:
#將調(diào)試信息輸出至/tmp/svn-up.out文件中,這對(duì)于調(diào)試很重要
exec >/tmp/svn-up.out 2>&1
#可以看到svn調(diào)用該shell腳本時(shí)所傳遞進(jìn)來的所有的參數(shù)
echo "$@"
#設(shè)置傳給SVN服務(wù)器中可以含有中文
export LANG="zh_CN.UTF-8"
#使用svn export命令將文件倉庫導(dǎo)出至文件夾下,也可以使用svn update命令,該命令
#貌似是只導(dǎo)出更新的一部分,這我沒有嘗試。
svn export --username admin --password admin http://10.23.0.240/project/home/administrator/ProgramFiles/apache-tomcat-6.0.28/webapps --force
cd /home/administrator/ProgramFiles/apache-tomcat-6.0.28/webapps
#對(duì)每個(gè)war文件建立相應(yīng)的文件夾并解壓
for file in *.war
do
#獲取相應(yīng)的war文件的文件夾名,如如果上傳的testSVN.war文件,則dirname為
#testSVN;
dirname=${file%%.*}
echo $dirname
echo $file
rm -rf $dirname
mkdir $dirname
cp $file $dirname
cd $dirname
#在該文件夾中將war文件解壓出來;
/home/administrator/ProgramFiles/jdk1.6.0_31/bin/jar -xf $file
rm -rf $file
cd ..
done
至此,該war文件一旦通過svn客戶端,上傳至svn服務(wù)器時(shí),就會(huì)相應(yīng)的部署到tomcat服務(wù)器下。
當(dāng)前題目:SVN部署http
文章起源:http://muchs.cn/article34/cgppse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)