赞
踩
注意:本测试是在centos系统上构建的项目(不需要编译),比如PHP,或者普通的同步资料,并不是Android。
起个项目名字
days to keep builds 是保持构建的天数,这个随意.
Max#of builds to keep 是保持构建的最大个数,三四个都行。
如果为空,都将以最大记录保存。
五个*代表每隔一分钟git会检测一次仓库代码是否更新
此命令没有写目标地址服务器的账号和Ip是因为我jenkins服务器和目标服务器是同一个,如果你们不是需要写成如下格式,
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
这里特别需要注意一下: 曾经一个 * 造成了一个很大的坑。
1、千万不要这样写:rsync avz --delete --progress * /var/www/test/test_jenkins;
这个 * 是错误的,最好写成 ./ 代表当前项目的目录,或者绝对路径 /var/lib/jenkins/workspace/github_test/,或者需要同步的文件,空格隔开,比如(rsync avz --delete --progress 1.txt 2.txt /var/www/test/test_jenkins)。
(一开始 --delete 参数始终没有执行,少则删之,以为是权限不够,各种查资料去解决,后来把命令拿到服务器用root用户执行,也是没有删除文件,所以测试后发现是写法有问题)
2、如果事先目标服务器用root用户建立了项目,那么很可能文件权限是root用户,使用 ls -al可以查看文件的属主属组,这个时候就要更改文件的组别,命令 :
- chown 命令
- 功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。
- 语法:chown [选项] 用户或组 文件
- 说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。
- 参数:
- - R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
- - v 显示chown命令所做的工作。
- 例1:把文件root的所有者改为jenkins。
- $ chown jenkins root
- 例2:把目录/test_jenkins及其下的所有文件和子目录的属主改成jenkins,属组改成jenkins。
- $ chown -R jenkins:jenkins ./test_crm/
-
-
- //我不小心敲成了chown -R jenkins.jenkins ./test_crm/ 也成功修改了组别(: -> .), 涨姿势。。
3、rsync 错误处理
①、报错:cannot delete non-empty directory ,添加--delete-excluded 参数即可。
②、报错: chgrp "XXXX" failed: Operation not permitted,添加 --no-o --no-g 参数即可。
这是因为我们使用了-a
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
而-o -g 分别代表保持文件所有者和组
-o, --owner preserve owner (super-user only)
-g, --group preserve group
但是我们使用的是jenkins这个用户啊,没有权限修改文件的组和所有者。就会报错,解决方法:
rsync -avz --no-o --no-g --delete-excluded --exclude=".git" --progress ./ /var/www/test/test_crm/;
假如我们更改了目标目录的属主和属组属于jenkins,那么就可以不添加 --no-o --no-g 参数。
③、报错:failed to set times on "/var/www/test/test_crm/.": Operation not permitted (1) 看似是时间问题,其实还是属主属组的权限问题。
所以说,更改属主属组的权限很重要。
4、使用结果
rsync -avz --delete --exclude=".git" --progress ./ /var/www/test/test_crm/;
rsync -avz --exclude=".git/" --exclude=".env" --exclude="storage/" --filter "protect .env" --delete --progress ./ /var/www/jmf/jmf_app/api/
解释:protect 参数就是保护接收端指定文件不被删除,百度的资料基本没有使用实例,(Laravel项目在同步的时候就不能删除.env文件,参考rsync官方文档:Rsync官方是文档)
//下面这两条按文档来讲应该是有问题的,--delete-excluded会使得--exclude=".git"的过滤规则失效。
rsync -avz --no-o --no-g --delete-excluded --exclude=".git" --progress ./ /var/www/test/test_crm/;
rsync -avz --delete-excluded --exclude=".git" --progress ./ /var/www/test/test_crm/;
资料说 --delete-excluded 参数是强制删除哪怕是excluded排除在外的文件,按字面意思,那么 --exclude=".git" 应该失效才对,但我测试,--exclude=".git" 其实是生效的,这点不是很理解。
关于rsync命令的使用参考:rsync
关于写法的参考:rsync写法
参考rsync官方文档:Rsync官方是文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。