如何使用powershell从svn服务器自动更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用powershell从svn服务器自动更新相关的知识,希望对你有一定的参考价值。

把下面代码添加了svn/hooks/post-commit里(替换部分路径)。当有svn提交,系统发现提交的代码涉及相关目录,就会通过rsync把代码同步到web服务器。不过这里还需要做一个rsync免输密码的设置。

#!/bin/sh
lines="$(cd /projects && svn up | wc -l)"
if [ $lines -gt 1 ]
then
cd /projects && rsync -rv * root@myserver.com:/var/www/
fi
参考技术A 网上有关于SVN的模块,可以下载后用这里的命令写脚本,就非常方便了。模块下载地址:
https://gallery.technet.microsoft.com/Subversion-PowerShell-bbd1db40本回答被提问者和网友采纳

Linux下搭建SVN服务器及自动更新项目文件到web发布目录(wwwroot)的方法

1、在SVN服务器端准备工作

说明:

服务器操作系统:centos7.3

SVN安装路径:/usr/bin/svn

SVN项目版本库路径:/home/svn/repo        --repo为版本库名称

SVN登录账号:admin

SVN登录密码:123456

Web站点根目录:/home/wwwroot/

实现目的:

当svn项目中有任何修改更新时,系统会自动实时从svn中检出文件并同步到Web站点根目录

2、安装SVN服务器

我在这里直接采用yum安装方式(当然也可以自己去官方下载安装)。

[[email protected] ~]# yum install subversion -y 

[[email protected] ~]# rpm -qa | grep sub      #查看安装文件

subversion-libs-1.7.14-10.el7.x86_64

subversion-1.7.14-10.el7.x86_64

[[email protected] ~]# svnserve --version      #检验已经安装的SVN版本信息

svnserve,版本 1.7.14 (r1542130)

   编译于 Nov 20 2015,19:25:09


版权所有 (C) 2013 Apache 软件基金会。

此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。

Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。


下列版本库后端(FS) 模块可用: 


* fs_base : 模块只能操作BDB版本库。

* fs_fs : 模块与文本文件(FSFS)版本库一起工作。


Cyrus SASL 认证可用。

3、创建SVN 版本库

[[email protected]server ~]# mkdir /home/svn/repo

[[email protected]server ~]# svnadmin create /home/svn/repo          --repo为版本库名称

4、配置svnserve

上述版本库/home/svn/repo建立后,在文件夹下会生成conf文件夹,进入/home/svn/repo/conf下面会有下面3个文件authz  、passwd 、 svnserve.conf。

[[email protected]server ~]# cd /home/svn/repo/

[[email protected] repo]# pwd

/home/svn/repo

[[email protected] repo]# ls

conf  db  format  hooks  locks  README.txt

[[email protected] repo]# cd conf/

[[email protected] conf]# ls

authz  passwd  svnserve.conf

4.1、svnserve.conf 文件, 该文件配置项分为以下5项:

       anon-access: 控制非鉴权用户访问版本库的权限。

       auth-access:  控制鉴权用户访问版本库的权限。

       password-db: 指定用户名口令文件名。

       authz-db:指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。

       realm:指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件,配置如下:

  • anon-access = none

  • auth-access = write

  • password-db = passwd

  • authz-db = authz

  • realm/home/svn/repo

4.2、passwd修改为:

  • [users]  

  • admin = 123456    //这里的username和password自己设置  

4.3、authz最后加上以下两行(这两行解决了 SVN客户端解决authorization failed问题)

  • [/]

  • * = rw

#################样例#################

[[email protected] conf]# cat authz

[groups]                                     #定义组

admin = admin                            #创建一个admin组,将用户加入到组

dev=tian,lier,erllo      

[/]                                             #根目录权限设置(就是“svn”这个文件夹)

aaa = rw                                    #aaa对svn下的所有版本库有读写权限            

[repo:/]                                     #repo:/,表示对repo版本库下的所有资源设置权限

@admin = rw                              #admin组的用户对repo版本库有读写权限

@dev = rw

#####################################

5、启动svnserve

[[email protected] conf]# svnserve -d -r /home/svn/repo/ 

                                                                  -d表示后台运行

                                                                  -r 指定根目录是/home/svn/repo/

[[email protected]server conf]# ps -ef | grep svn

root     28950     1  0 19:12 ?        00:00:00 svnserve -d -r /opt/svn/repo/

root     28952 28246  0 19:12 pts/0    00:00:00 grep --color=auto svn

6、停止svnserve

[[email protected]server conf]# ps -aux |grep svn

[[email protected]server conf]# kill -9  进程号         #进程杀掉

7、客户端使用

客户端用svn或者windows下的TortoiseSVN客户端。

1)从服务端checkout版本库(在当前目录下)

svn checkout svn://服务器的ip地址/

例:检出svn库中的内容

[[email protected]server ~]# cd /home/

[[email protected]server home]# svn checkout svn://127.0.0.1/repo

在/home目录下便生成了一个 repo 目录。里面的内容是 版本库中的内容。

执行 ll -a 可以看见 .svn 这边是svn的记录

新增几个文件 touch test.txt

svn add * (一定要在 repo目录下哦,因为要有 .svn呀)           #为版本库中添加内容

svn commit -m ‘add file‘                                                #为版本库中提交内容,一定要对当前版本写注释

删除版本库中的文件

svn delete svn://127.0.0.1/pro/er.txt -m ‘del‘


注:可以使用带用户名和密码的访问:

svn co --username hello --password 123svn://192.168.233.203/repo


*************************************************************************

SVN版本库更新

svn up /svn/repo

上传文件到服务器

[[email protected]server repo]# touch /svn/repo/test.php        #所有的动作必须在repo版本库中完成

[[email protected]server repo]# svn add /svn/repo/test.php           #上传test.php文件到svn服务器

删除服务器上的文件

[[email protected]server repo]# svn rm /svn/repo/test.php--force

查看版本库内容

[[email protected] repo]# svn list /svn/repo/

--------------------------------------------------------------------------------------------------------

创建版本库:

终端输入:svnadmin create [路径]
该路径可以是相对路径,例如,当前在home/user/svn/目录下,输入svnadmin create myproject,则该版本库会被创建在home/user/svn/目录下,新建一个文件夹名为myproject,其中便是版本库的文件了。

将文件导入版本库:
终端输入:svn import [源路径] [目标版本库路径] -m [日志信息]
源路径可以是相对路径,导入时会递归导入源路径下的所有文件和文件夹,目标版本库路径需要绝对目录(反正我试验是这样的),例如版本库的目录是:home/user/svn/myproject/。则应该这样写:file:///home/user/svn/myproject/
例如将当前目录导入版本库myproject:
svn import . file:///home/user/svn/myproject -m"导入文件"

从版本库导出:
导入后原文件并未被纳入版本管理,若想获得受版本控制的文件,就需要从版本库导出
终端输入:svn co [版本库路径] 
例如将myproject库中的文件导出到当前目录:svn co file:///home/user/svn/myproject .

*************************************************************************

8、然后配置SVN钩子自动更新项目文件到web目录

钩子 hooks (可以将svn版本库中的内容同步更新到指定目录)

[[email protected] ~]# cd /home/svn/repo/hooks下

[[email protected] hooks]# vim post-commit 

 

#!/bin/sh
export LC_CTYPE="zh_CN.UTF-8"
SVN=/usr/bin/svn
TODIR=/home/www #要强制更新的目录
$SVN update –username svnuser –password svnpasswd $TODIR #执行更新


[[email protected] hooks]#  chmod a+x post-commit

[[email protected] hooks]#  cd  /home

[[email protected] home]# ls

www     repo

[[email protected] home]# mv  /home/repo  /home/wwwroot                       

                                              #将linux客户端的检出的版本库命名为web的发布目录wwwroot



*************************************************************************

文档引自:http://www.cnblogs.com/xuyk/p/6024757.html


一、使用SVN中post-commit实现自动实时从svn中检出文件并同步到Web站点根目录

cd /home/svn/hooks

cp post-commit.tmpl post-commit

vim post-commit #编辑,添加以下代码

REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
SVN_PATH=/usr/bin
WEB_PATH=/home/wwwroot/
SVN_USER=admin
SVN_PASS=admin
LOG_PATH=/tmp/svn.log
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH/svn update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH    

:wq #保存退出

chown www:www /home/svn/hooks/post-commit #设置脚本所属用户组,www为web服务运行账户和组

chmod +x /home/svn/hooks/post-commit #添加脚本执行权限

说明:

whoami #执行此程序的用户

REPOS="$1" #svn项目绝对路径值

REV="$2" #最新版本号

--no-auth-cache #不保存账户认证信息

二、客户端测试

使用svn客户端添加一个文件之后,进行svn添加并提交操作进入服务器/home/wwwroot目录下可以看到提交到svn的文件已自动更新到web目录下

至此,Linux下SVN服务器自动更新文件到Web目录教程完成。

*************************************************************************


本文出自 “MQ_douer” 博客,请务必保留此出处http://douer.blog.51cto.com/6107588/1915001

以上是关于如何使用powershell从svn服务器自动更新的主要内容,如果未能解决你的问题,请参考以下文章

如何用Jenkins实现自动化部署svn更新代码

bat 每天开机自动从git/svn服务器更新代码

如何用Jenkins实现自动化部署svn更新代码

如何利用svn自动同步更新到网站服务器

使用PowerShell关闭Windows更新服务和自动更新Windows 10

idea 怎样关闭svn自动更新