在linux服务器上装svn版本管理,自动部署代码到项目
2016-05-17 09:13
471 查看
http://www.cnblogs.com/mitang/p/4309762.html
http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw3X&pos=1
http://v5sheji.com/archives/setupsvnonlinux.html
http://zetawiki.com/wiki/CentOS_%EC%84%9C%EB%B8%8C%EB%B2%84%EC%A0%84_%EC%84%9C%EB%B2%84_%EC%84%A4%EC%B9%98_%EB%B0%8F_%EC%84%A4%EC%A0%95_(svn)
1.安装svn服务器端
从镜像下载安装svn服务器端
中间会提示是否ok,输入y,确认
安装成功提示:.....complete!
依次执行如下命令:
2.下面要修改这个目录下的三个配置文件
(1) svnserve.conf //配置版本库信息和用户文件和用户密码文件的路径、版本库路径
(2) authz //文件,创建svn组和组用户的权限
(3) passwd //创建或修改用户密码
3.然后要设置自启动
打开自启动文件 /etc/rc.local
添加下面一行
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
passwd 设置组中用户的账号和密码
5.客户端访问
假设客户端使用tortoiseSVN
打开资源库浏览器输入地址, svn://你的svn服务器ip:3690
输入用户名ddl 密码12345
因为没有网资源库里放文件所以需要你用客户端右键【create forder】,然后【add forder】
6.使用post-commit实现自动部署
搭建svn都不是仅仅为了把代码存到仓库,而是同步部署到对应的项目。
在
tmpl文件是模版文件,我们要用post-commit需要手动复制对应tmpl里面的内容到新的post-commit里面
然后打开文件清空内容,修改为以下代码:
其中第一行意思是:用sh来解析这个脚本,因为各种shell的语法有细微的差别
第二行是编码格式:这里我使用的是UTF-8
最后一行
修改post-commit的可执行权限
step.3:
在服务器进入项目目录
注意此处不要checkout文件夹,正确代码应该是这样:
注意:此处的/test 可不需要添加:( 添加的目的是为了实现多个项目。 )
至此,如果按照此步骤搞下来,应该已经没有问题了,你可以本地commit代码,自动同步到项目了。
6.常见错误,我遇到的
255错误:post-commit没有给执行权限 或者 头部没有执行用sh执行,就是没有
提示跳过目录:服务器目录没有checkout代码,记得一定要先checkout一次,才能同步(!,每次新建项目都需要)
什么提示也没有:这种情况出现在用工具commit的时候,成功了,但是就是没有同步,建议你到linux下,使用
提示**** is a direcitory:
1 개요
2 설치
확인
3 설치
4 확인
2
5 저장소
생성
6 /etc/sysconfig/svnserve
생성
7 svnserve.conf
수정
8 계정
설정
9 (optional)
권한 없음 오류시
10 서비스
시작
11 재부팅시
자동시작 설정
12 (저장소
삭제)
13 같이
보기
14 주석
서브버전 설치 및 설정하기CentOS 서브버전 설치CentOS SVN 설치리눅스 subversion 패키지는 서버 + 클라이언트
이 문서에서는 저장소(repository)의 상위 디렉토리를 /repos으로 한 예이다.
해당 디렉토리 아래에 저장소(디렉토리)를 여러 개 둘 수 있다(예: proejct1, project2...).
SVN
설치 확인 문서를 참고하십시오.
→ 설치되어 있지 않으며, yum을 통해 설치가능하다.
→ 클라이언트 명령어(svn)과 서버 명령어(svnserve)를 바로 사용가능하다.
→ 서비스로도 등록되어 있다.
서버 1대에 저장소를 여러 개 생성할 수 있다. 프로젝트 저장소 폴더들이 /repos 아래에 있도록 설정할 것이다.
명령어
실행 예시
여러 프로젝트를 담기 위해 반드시 저장소를 여러 개 만들 필요는 없다. 저장소 폴더 아래에 다시 프로젝트별 폴더들을 만들어 관리하면 되기 때문이다.
그렇다면 언제 저장소를 여러 개 만들어야 할까? 하나의 저장소는 하나의 사용자 권한 설정을 가지고 있다. 그러므로 사용자들의 권한이 구분되어야 할 때 저장소를 여러 개 두는 것이 좋다.
/etc/sysconfig/svnserve 문서를
참고하십시오.
이 파일을 생성해주어야 service svnserve start/stop이 가능하다.[1]
명령어
실행예시
svnserve.conf 문서를
참고하십시오.
svnserve.conf 파일을 svnserve.conf.old 로 변경하여 보존해두고 새로 작성한다.
명령어
실행예시
→ 비로그인 접속자는 권한 없음, 로그인하면 쓸 수 있음, passwd와 authz 파일을 사용함.
/repos/project1/conf/passwd 문서를
참고하십시오.svn는 OS계정이 아니라 자체 계정을 사용한다.
해당 저장소의 conf 디렉토리에 있는 passwd를 편집하여 계정을 등록한다.
패스워드 분실시에도 이 파일을 열어보면 된다.
passwd 파일을 passwd.old 로 이름을 변경하여 보존해두고 새로 작성한다.
권한이 없다는 오류가 날 경우 /repos/project1/conf/authz 파일
마지막에 계정의 권한 추가
svnserve
시작/중지 문서를 참고하십시오.
/etc/sysconfig/svnserve 파일을 설정해두었기 때문에 service로 시작/중지를 할 수 있다.
→ 기본 포트인 3690 포트로 서비스 중. (다른 포트로 변경하려면 /etc/sysconfig/svnserve를
수정해야 한다.)
여기까지 되었다면 설정이 완료된 것이다. 다른 컴퓨터에서 SVN 클라이언트로 접속하면 된다.[2] 접속
URL은 svn://서버주소/proejct1 이다.
→ 재부팅시에 svnserve 서비스가 자동으로 시작될 것이다.
주의! 저장소를 삭제하고 싶을 때만 이 문단을 참고하시라. 만들 때는 svnadmin으로 하였지만, 지울 때는 그냥 저장소 폴더를 지우면 된다.
명령어
실행예시
→ 깔끔하게 지워졌다
우분투
서브버전 서버 설치 및 설정 (svn)
우분투
서브버전 서버 설치 및 설정 (http)
/etc/init.d/svnserve
이동↑ /etc/init.d/svnserve 파일이
이 파일을 참조하기 때문이다.
이동↑ 물론
방화벽 등 다른 문제가 없다는 가정 하에 그렇다.
http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw3X&pos=1
http://v5sheji.com/archives/setupsvnonlinux.html
http://zetawiki.com/wiki/CentOS_%EC%84%9C%EB%B8%8C%EB%B2%84%EC%A0%84_%EC%84%9C%EB%B2%84_%EC%84%A4%EC%B9%98_%EB%B0%8F_%EC%84%A4%EC%A0%95_(svn)
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是否启动查看一下SVN信息[/code]
ps aux |grep 'svn' 查找所有svn启动的进程
kill -9 2505 杀死2505这个查找到的svn进程
svnserve -d -r /usr/local/svnRepo/first启动svn(可以把这个放到/etc/local/rc.local文件中,实现开机自启动)
[code]netstat -anp|grep svnserve
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/testcheckout 整个项目。
注意此处不要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的路径
CentOS 서브버전 서버 설치 및 설정 (svn)
목차
1 개요2 설치
확인
3 설치
4 확인
2
5 저장소
생성
6 /etc/sysconfig/svnserve
생성
7 svnserve.conf
수정
8 계정
설정
9 (optional)
권한 없음 오류시
10 서비스
시작
11 재부팅시
자동시작 설정
12 (저장소
삭제)
13 같이
보기
14 주석
개요[편집]
서브버전 설치 및 설정하기CentOS 서브버전 설치CentOS SVN 설치리눅스 subversion 패키지는 서버 + 클라이언트이 문서에서는 저장소(repository)의 상위 디렉토리를 /repos으로 한 예이다.
해당 디렉토리 아래에 저장소(디렉토리)를 여러 개 둘 수 있다(예: proejct1, project2...).
설치 확인[편집]
SVN
설치 확인 문서를 참고하십시오.
[root@zetawiki ~]# svn -bash: svn: command not found
[root@zetawiki ~]# rpm -qa | grep subversion [root@zetawiki ~]# yum list subversion ... (생략) Available Packages subversion.i686 1.6.11-10.el6_5 base subversion.x86_64 1.6.11-10.el6_5 base
→ 설치되어 있지 않으며, yum을 통해 설치가능하다.
설치[편집]
[root@zetawiki ~]# yum install subversion ... (생략) ============================================================================================= Package Arch Version Repository Size ============================================================================================= Installing: subversion x86_64 1.6.11-10.el6_5 base 2.3 M Installing for dependencies: neon x86_64 0.29.3-3.el6_4 base 119 k pakchois x86_64 0.4-3.2.el6 base 21 k Transaction Summary ============================================================================================= Install 3 Package(s) Total download size: 2.4 M Installed size: 12 M Is this ok [y/N]: y
... (생략) Installed: subversion.x86_64 0:1.6.11-10.el6_5 Dependency Installed: neon.x86_64 0:0.29.3-3.el6_4 pakchois.x86_64 0:0.4-3.2.el6 Complete!
확인 2[편집]
[root@zetawiki ~]# svn Type 'svn help' for usage.
[root@zetawiki ~]# svnserve You must specify exactly one of -d, -i, -t or -X. Type 'svnserve --help' for usage.
→ 클라이언트 명령어(svn)과 서버 명령어(svnserve)를 바로 사용가능하다.
[root@zetawiki ~]# service svnserve status svnserve is stopped
→ 서비스로도 등록되어 있다.
저장소 생성[편집]
서버 1대에 저장소를 여러 개 생성할 수 있다. 프로젝트 저장소 폴더들이 /repos 아래에 있도록 설정할 것이다.명령어
mkdir /repos cd /repos svnadmin create --fs-type fsfs 저장소명 ll
실행 예시
[root@zetawiki ~]# mkdir /repos [root@zetawiki ~]# cd /repos [root@zetawiki repos]# svnadmin create --fs-type fsfs project1 [root@zetawiki repos]# ll total 4 drwxr-xr-x. 6 root root 4096 Jun 1 09:27 project1
여러 프로젝트를 담기 위해 반드시 저장소를 여러 개 만들 필요는 없다. 저장소 폴더 아래에 다시 프로젝트별 폴더들을 만들어 관리하면 되기 때문이다.
그렇다면 언제 저장소를 여러 개 만들어야 할까? 하나의 저장소는 하나의 사용자 권한 설정을 가지고 있다. 그러므로 사용자들의 권한이 구분되어야 할 때 저장소를 여러 개 두는 것이 좋다.
/etc/sysconfig/svnserve 생성[편집]
/etc/sysconfig/svnserve 문서를
참고하십시오.
이 파일을 생성해주어야 service svnserve start/stop이 가능하다.[1]
명령어
echo 'OPTIONS="--threads --root 저장소최상위폴더"' > /etc/sysconfig/svnserve cat /etc/sysconfig/svnserve
실행예시
[root@zetawiki ~]# echo 'OPTIONS="--threads --root /repos"' > /etc/sysconfig/svnserve [root@zetawiki ~]# cat /etc/sysconfig/svnserve OPTIONS="--threads --root /repos"
svnserve.conf 수정[편집]
svnserve.conf 문서를
참고하십시오.
svnserve.conf 파일을 svnserve.conf.old 로 변경하여 보존해두고 새로 작성한다.
명령어
cd /repos/project1/conf/ cat svnserve.conf mv svnserve.conf svnserve.conf.old echo '[general]' > svnserve.conf echo 'anon-access = none' >> svnserve.conf echo 'auth-access = write' >> svnserve.conf echo 'password-db = passwd' >> svnserve.conf echo 'authz-db = authz' >> svnserve.conf cat svnserve.conf
실행예시
[root@zetawiki ~]# cd /repos/project1/conf/ [root@zetawiki conf]# cat svnserve.conf ### This file controls the configuration of the svnserve daemon, if you ### use it to allow access to this repository. (If you only allow ### access through http: and/or file: URLs, then this file is ### irrelevant.) ... (생략)
[root@zetawiki conf]# mv svnserve.conf svnserve.conf.old [root@zetawiki conf]# echo '[general]' > svnserve.conf [root@zetawiki conf]# echo 'anon-access = none' >> svnserve.conf [root@zetawiki conf]# echo 'auth-access = write' >> svnserve.conf [root@zetawiki conf]# echo 'password-db = passwd' >> svnserve.conf [root@zetawiki conf]# echo 'authz-db = authz' >> svnserve.conf [root@zetawiki conf]# cat svnserve.conf [general] anon-access = none auth-access = write password-db = passwd authz-db = authz
→ 비로그인 접속자는 권한 없음, 로그인하면 쓸 수 있음, passwd와 authz 파일을 사용함.
계정 설정[편집]
/repos/project1/conf/passwd 문서를
참고하십시오.svn는 OS계정이 아니라 자체 계정을 사용한다.
해당 저장소의 conf 디렉토리에 있는 passwd를 편집하여 계정을 등록한다.
패스워드 분실시에도 이 파일을 열어보면 된다.
passwd 파일을 passwd.old 로 이름을 변경하여 보존해두고 새로 작성한다.
[root@zetawiki conf]# mv passwd passwd.old [root@zetawiki conf]# vi passwd
[users] testuser1 = P@ssw0rd testuser2 = P@ssw0rd
(optional) 권한 없음 오류시[편집]
권한이 없다는 오류가 날 경우 /repos/project1/conf/authz 파일마지막에 계정의 권한 추가
[/] testuser1 = rw testuser2 = rw
서비스 시작[편집]
svnserve
시작/중지 문서를 참고하십시오.
/etc/sysconfig/svnserve 파일을 설정해두었기 때문에 service로 시작/중지를 할 수 있다.
[root@zetawiki repos]# service svnserve start Starting svnserve: [ OK ]
[root@zetawiki repos]# ps -ef | grep svnserve | grep -v grep root 2581 1 0 11:12 ? 00:00:00 /usr/bin/svnserve --daemon --pid-file=/var/run/svnserve.pid --threads --root /repos
[root@zetawiki repos]# netstat -anp | grep svnserve tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2581/svnserve
→ 기본 포트인 3690 포트로 서비스 중. (다른 포트로 변경하려면 /etc/sysconfig/svnserve를
수정해야 한다.)
여기까지 되었다면 설정이 완료된 것이다. 다른 컴퓨터에서 SVN 클라이언트로 접속하면 된다.[2] 접속
URL은 svn://서버주소/proejct1 이다.
재부팅시 자동시작 설정[편집]
[root@zetawiki repos]# chkconfig --list svnserve svnserve 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@zetawiki repos]# chkconfig svnserve on
[root@zetawiki repos]# chkconfig --list svnserve svnserve 0:off 1:off 2:on 3:on 4:on 5:on 6:off
→ 재부팅시에 svnserve 서비스가 자동으로 시작될 것이다.
(저장소 삭제)[편집]
주의! 저장소를 삭제하고 싶을 때만 이 문단을 참고하시라. 만들 때는 svnadmin으로 하였지만, 지울 때는 그냥 저장소 폴더를 지우면 된다.명령어
service svnserve stop rm -rf /repos/project1 ll
실행예시
[root@zetawiki ~]# service svnserve stop Stopping svnserve: [ OK ]
[root@zetawiki ~]# rm -rf /repos/project1 [root@zetawiki ~]# ll total 0
→ 깔끔하게 지워졌다
같이 보기[편집]
우분투서브버전 서버 설치 및 설정 (svn)
우분투
서브버전 서버 설치 및 설정 (http)
/etc/init.d/svnserve
주석[편집]
이동↑ /etc/init.d/svnserve 파일이이 파일을 참조하기 때문이다.
이동↑ 물론
방화벽 등 다른 문제가 없다는 가정 하에 그렇다.
相关文章推荐
- 解决linux下javac -version和java -version版本显示不一致
- C#在Linux上的开发指南
- perf
- linux内核 address_space 结构
- Linux内核模块分析(module_init宏)
- 嵌入式学习从基础到高级概述+书籍推荐(内核驱动方向)
- 快速配置Linux下的编程环境变量
- 在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上
- 一组有趣的漫画,解释Linux下安装软件的全过程
- 【Linux基础】常用服务器构建
- Linux内核配置以及Make menuconfig过程分析
- linux文件系统
- Linux下提示命令找不到:bash:command not found
- Linux系统下Mysql使用简单教程(一)
- Linux command:apt-get
- linux一些热键和man page
- Linux VPS下SSH常用命令
- Linux 进程管理 CGroup
- centos6源码安装mysql5.6.29
- windows 用vnc 连接 centos