linux(Centos)系统用jenkins构建项目以及报错处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37035946/article/details/87919026

注意:本测试是在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可以查看文件的属主属组,这个时候就要更改文件的组别,命令 :

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 --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

猜你喜欢

转载自blog.csdn.net/qq_37035946/article/details/87919026