jenkins结合cygwin软件实现从centos发布代码rsync到windows server2019的过程

1.下载cygwin这个软件
打开https://cygwin.com/install.html, 针对不同的windows类型下载,本机下载的是(https://cygwin.com/setup-x86_64.exe),点击安装,点击在线安装
要根据提示安装rsync同步和cygrunsrv服务管理这两个插件

2.rsync配置的编辑
# rsync主配置文件
c:/cygwin64/etc/rsyncd.conf

use chroot = yes
max connections =
log file = /var/log/rsyncd.log [rsync_test]
path = /cygdrive/c/rsync_test
comment = Rsync Test
auth users = rsync_user
secrets file = /etc/rsyncd.secrets
write only = false
read only = false
list = true [apache_go.chinasoft.com]
path = /cygdrive/c/Users/Administrator/wwwroot/go.chinasoft.com
read only = false
transfer logging = yes
secrets file = /etc/rsyncd.secrets [apache_convert.chinasoft.com]
path = /cygdrive/c/Users/Administrator/wwwroot/convert.chinasoft.com
read only = false
transfer logging = yes
secrets file = /etc/rsyncd.secrets

4.编辑rsync的密码
c:/cygwin64/etc/rsyncd.secrets

apache:pass

# 管理员身份运行 cygwin teminal
# cygwin teminal管理员身份授权密码文件

chmod o-rwx /etc/rsyncd.secrets

3.执行一下命令安装rsync服务

cygrunsrv -I "Rsync" -p "c:\\cygwin64\\bin\\rsync.exe" -a "--config=c:\\cygwin64\\etc\\rsyncd.conf --daemon --no-detach" -f "Rsync daemon service" --user Administrator --passwd pass --stdout "c:\\cygwin64\\rsyncd-stdin.log"  --stderr "c:\\cygwin64\\rsyncd-stderr.log" -y "tcpip" -e "CYGWIN=nontsec binmode" -c "c:\\cygwin64" -o

# 启动服务
cygrunsrv.exe -S "Rsync"

# 如果按照失败可以在teminal中删除服务
cygrunsrv.exe -R "Rsync"

# windows防火墙给指定的ip放行873端口

4.jenkins发布代码的配置

# 拉取代码前,推送代码

#!/bin/bash

# 此脚本功能为根据构建时选择的参数,同步 /data/www/vhosts/go.chinasoft.com 下的文件同步到远程中转机器
# 2020.0909 初始化脚本 #非apache用户运行脚本,则退出
if [ `whoami` != "apache" ];then
echo "only apache can run me"
exit
fi ## .定义变量
dir_name=bak.$(date +%Y-%m-%d-%H-%M-%S)
project_dir=/data/www/vhosts/go.chinasoft.com ## .备份代码函数
function func_project_backup(){
cp -a $project_dir/ /data/data_backup/go.chinasoft.com_$dir_name
}
func_project_backup ## .判断代码发布目录变量是否为空
if [ ! $project_dir ];then
echo "$project_dir IS NULL ,shell exit!!!!"
exit
fi ## .判断同步状态
function func_rsync_status(){
if [[ $? == || $? == ]];then
rsync_edit=
else
rsync_edit=
echo "`date` 同步到本地目标失败! "
exit
fi
} # 执行编译
cd ${WORKSPACE} && chmod +x ./init.sh && ./init.sh production ## .同步到本地待发路径
function func_rsync_project_local(){
echo "xxxxxxxxxxxxxx同步待发目录开始xxxxxxxxxxxxxxxxxx"
cd $WORKSPACE
/usr/local/bin/rsync -vauP -progress --delete --exclude='.git/' --exclude='.gitignore' --exclude='*.log' $WORKSPACE/ $project_dir/
echo "xxxxxxxxxxxxxx同步待发目录完成xxxxxxxxxxxxxxxxxx"
func_rsync_status
} func_rsync_project_local
func_rsync_project_local ## 5.推送代码到远程中转机并发布(发布到线上) echo "------------------------------------ rsync start prod -----------------------------------------"
chown -R apache.users $project_dir/
sleep 1 /bin/bash /usr/local/worksh/jeninks_task/media_io_go.chinasoft.com.sh
func_rsync_status echo "------------------------------------ rsync done prod -----------------------------------------" ## 7.通过插件执行远程中转机上的同步脚本

# 在jenkins中执行同步代码到windows的脚本

/usr/local/worksh/jeninks_task/media_io_go.chinasoft.com.sh

#!/bin/bash
#############################################
## 设置变量和GET请求过来的变量
## GET请求传过来的文件所在目录,目录路径写全路径了
#dir=$
passfile="/data/www/.rsync/pass.media_io_win.chinasoft.com" # 非apache用户运行脚本,则退出
if [ `whoami` != "apache" ];then
echo " only apache can run me"
exit
fi # 判断同步状态
function func_rsync_status(){
if [[ $? == || $? == ]];then
rsync_edit=
else
rsync_edit=
echo "`date` 同步到目标失败! "
exit
fi
} # 判断目录是否为空函数
function func_is_empty_dir(){
return `ls -A $|wc -w`
} # 代码发目录
project_dir="/data/www/vhosts/go.chinasoft.com/" # 判断待发目录是否为空,为空则退出
if func_is_empty_dir $project_dir
then
echo " $project_dir is empty , exit!!!!"
exit
else
echo " $project_dir 可以发布"
fi ## 设置变量,目标服务器
server_ip_list="1.1.1.1" # src directory
src_directory="go.chinasoft.com" # dst directory
dst_directory="go.chinasoft.com" exclude_list="--exclude=.svn --exclude=.git --exclude=.gitignore --exclude=*.log --exclude=.gitattributes --exclude=.env" function account_media_io_rsync()
{ # rsync ip_list
for ip in ${server_ip_list}
do
echo "####################rsync ${ip} start################################"
rsync -zavP --bwlimit= ${exclude_list} --password-file=${passfile} /data/www/vhosts/${src_directory}/ apache@${ip}::apache_go.chinasoft.com
func_rsync_status
echo "################### rsync ${ip} end #######################"
done
} account_media_io_rsync

推送代码后置操作,进行远程windows bat脚本进行服务的重启

jenkins结合cygwin软件实现从centos发布代码rsync到windows server2019的过程的更多相关文章

  1. Jenkins自动发布代码实战篇

    Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...

  2. 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能

    完全国人自主研发原创的智能软件路由器即将发布: 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能 智能软件路由器 BDS 简要介绍 http://kan.weibo.co ...

  3. jenkins+maven+svn实现简单的一键发布

    前言      在安装之前,我想说明一下本文的目的,jenkins的一款持续集成工具,      它可以做的事情很多,其中一个主要的功能就是简化部署流程          回想一下我们的发布流程:   ...

  4. Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)

     转载:http://www.cnblogs.com/EasonJim/p/6295372.html Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践) 前提: 这一篇是继上一 ...

  5. Jenkins实现生产环境部署文件的回滚操作(Windows)

    由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...

  6. 配置Git Extension免密码发布代码到CSDN

    配置Git Extension免密码发布代码到CSDN [本文默认大家安装了Git以及Git Extension] 今天花费了许多的时间处理这个问题,希望能给大家节约时间.闲话少说:使用ssh验证来p ...

  7. CentOS下通过rdesktop连接Windows远程桌面

    众所周知,微软的Windows提供了一种远程桌面系统(Remote Desktop),该服务的默认端口是3389,可使用户远程登录进行系统管理或作为终端服务器运行各种应用软件. 而要连接Windows ...

  8. CentOS 6.5 rsync+inotify实现数据实时同步备份

    CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync    remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...

  9. 在离线环境中发布.NET Core至Windows Server 2008

    在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...

随机推荐

  1. Java不可重入锁和可重入锁的简单理解

    基础知识 Java多线程的wait()方法和notify()方法 这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出Ille ...

  2. PowerDesigner 使用笔记

    1.将mysql数据结构导入到PowerDesigner https://blog.csdn.net/guochanof/article/details/81905616 2.设计数据库过程 http ...

  3. 软工团队项目之团队展示&选题(OnTime——S.L.N)

    软工团队项目之团队展示&选题(OnTime——S.L.N) 一.团队展示 队名:『S.L.N』即Seigelion——乃“攻城狮”之意. 队员学号: 团队项目描述:(项目名称:OnTime) ...

  4. 第七天Scrum冲刺博客

    1.会议照片 2.项目进展 团队成员 昨日计划任务 今日计划任务 梁天龙  学习课程页面  建议页面 黄岳康  定义个人课程  登陆页面 吴哲翰  完成页面的与后端的沟通交流  继续保持确认功能齐全 ...

  5. Tmux安装和使用

    1.What's tmux tmux 是一个终端复用器: 可以激活多个终端或窗口, 在每个终端都可以单独访问,每一个终端都可以访问,运行和控制各自的程序.tmux类似于screen,可以关闭窗口将程序 ...

  6. Ubuntu安装Windows官方版QQ和微信(使用deepin wine)

  7. 前端用vue怎么接收并导出文件

    window.location.href = "excel地址" 如果是 get 请求,那直接换成 window.open(url) 就行了 创建一个隐藏的 iframe,把 if ...

  8. Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储

    一,引言 上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage 来存储项目中的一些日志文件,用户头像,用户视频等等. ...

  9. rpc之负载均衡

    使用集群,比如zk来控制注册中心,当一个服务有多个请求地址的时候,会返回多个地址. 那么就需要负载均衡来控制我们要请求哪台机器来得到请求. 方案一:随机 传入key值和key所包含的ip地址值,该地址 ...

  10. 深入了解Netty【八】TCP拆包、粘包和解决方案

    1.TCP协议传输过程 TCP协议是面向流的协议,是流式的,没有业务上的分段,只会根据当前套接字缓冲区的情况进行拆包或者粘包: 发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由 ...