当前位置:   article > 正文

linux(Centos)系统用jenkins构建项目以及报错处理_保持构建的最大个数

保持构建的最大个数

注意:本测试是在centos系统上构建的项目(不需要编译),比如PHP,或者普通的同步资料,并不是Android。

1、创建项目

起个项目名字

 

2、一般设置(可以省略)

days to keep builds 是保持构建的天数,这个随意.

Max#of builds to keep 是保持构建的最大个数,三四个都行。

如果为空,都将以最大记录保存。

 

3、构建触发器

 

五个*代表每隔一分钟git会检测一次仓库代码是否更新

 

 4、构建后操作

此命令没有写目标地址服务器的账号和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可以查看文件的属主属组,这个时候就要更改文件的组别,命令 :

  1. chown 命令
  2.   功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。
  3.   语法:chown [选项] 用户或组 文件
  4.   说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。
  5.   参数:
  6.   - R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
  7.   - v 显示chown命令所做的工作。
  8.   例1:把文件root的所有者改为jenkins。
  9.   $ chown jenkins root
  10.   例2:把目录/test_jenkins及其下的所有文件和子目录的属主改成jenkins,属组改成jenkins。
  11.   $ chown -R jenkins:jenkins ./test_crm/
  12. //我不小心敲成了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官方是文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/676948
推荐阅读
相关标签
  

闽ICP备14008679号