Jenkins结合rsync同步代码

背景:之前发布代码一直使用的一个jenkins插件 Publish over SSH,如果是java语言不存在问题,每次只拷贝一个jar包,但是如果是前端或者php这种类型的代码会存在问题:假如在gitlab仓库删除一个文件,jenkins拉取更新再通过Publish over SSH推送到服务器。这个过程中在gitlab仓库被删除的文件在远端服务器上是不会被删除的,因为Publish over SSH只会做增量更新。如果代码经常添加删除文件,那么远程机器上的代码文件就会越堆越多。

web机器:

安装rsync

[root@yanxiang_test webapp]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode

#同步过来后文件的主组
uid = nginx
gid = nginx

use chroot = yes
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = *
hosts deny =10.0.8.9

#要在本机创建的用户
auth users = ysg

#内容格式为 user:passwd
secrets file = /etc/rsync.password

#同步到本机的目录
[webapp]
path = /var/webapp/
[root@yanxiang_test webapp]# cat /etc/rsync.password
ysg:123456xxx
[root@yanxiang_test webapp]#
jenkins机器:

安装rsync

[root@izbp1gldj1nzq5934tk5czz ~]# cat /etc/rsync.password
#只需要存储密码就行了,和web机器的密码一样
123456xxx
[root@izbp1gldj1nzq5934tk5czz ~]# rsync -rltDqzp --no-o --no-g  --delete /root/.jenkins/workspace/go_script ysg@172.16.72.173::webapp --exclude ".git"    --password-file=/etc/rsync.password

#参数解释
# -r 递归
# -l 复制符号链接为符号链接
# -t 保留修改时间
# --no-o --no-g 不改变主组
# --delete 删除差异文件
# /root/.jenkins/workspace/go_script 同步目录
# --exclude ".git" 需要排除的目录或者文件,多个--exclude指定多个目录或文件
# --password-file ysg用户和远程机器认证的密码

jenkins上的配置:

1赞