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. 5分钟快速了解MySQL索引的各种类型

    文章持续更新,微信搜索「万猫学社」第一时间阅读. 关注后回复「电子书」,免费获取12本Java必读技术书籍. 什么是索引? 索引是数据库存储引擎用于快速查找到指定数据的一种数据结构. 可以用新华字典做 ...

  2. 对java程序员来说时间格式永远让人挠头来看Java Date Time 教程-时间测量

    在Java中,用System.currentTimeMillis()来测量时间最方便. 你要做的是在某些操作之前获取到时间,然后在这些操作之后你想要测量时间,算出时间差.下面是一个例子: long s ...

  3. 第2篇scrum

    第2篇scrum 一.站立式会议 1.1会议照片 想得美 1.2项目进展 团队成员 昨日完成任务 今日计划任务 感想 吴茂平 完善用户系统 改进评论数据表,增加评论,删除评论,查询评论 今天也是元气满 ...

  4. WordCount of Software Engineering

    1.Github项目地址:https://github.com/BayardM/WordCount 2.PSP表格(before): PSP2.1 Personal Software Process ...

  5. 20分钟理清Maven构建中的测试相关工具的关系

    如果你用Maven进行系统构建,同时还要同步编写测试用例,获取用例成功与否以及用例覆盖率的相关报告,那么这些工具你肯定接触过不少: JUnit TestNG maven-surefire-plugin ...

  6. php最好的开发工具合集

    欲先攻其事必先利其器,新接触pphp的小伙伴们,你们可要注意阅读本文了哦! 常见好用的php开发工具汇总 1.SublimeText3 工具简介: Sublime Text是一款目前非常流行的代码编辑 ...

  7. muduo源码解析9-timezone类

    timezone class timezone:public copyable { }: 作用: 感觉有点看不懂,detail内部实现文件类不明白跟时区有什么关系.timezone类主要是完成各个时区 ...

  8. java23种设计模式——五、建造者模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  9. springsession

    Spring Session 一. HttpSession 回顾 1 什么是 HttpSession 是 JavaWeb 服务端提供的用来建立与客户端会话状态的对象. 二. Session 共享 1 ...

  10. 详细分析链表的数据结构的实现过程(Java 实现)

    目录 链表的数据结构的实现过程(Java 实现) 前言 基本概念 链表的基本结构 链表的基本操作的实现 在链表中添加元素 在链表头添加元素 在链表指定位置处添加元素 链表的虚拟头节点 链表的查询和修改 ...