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

  1. use chroot = yes
  2. max connections =
  3. log file = /var/log/rsyncd.log
  4.  
  5. [rsync_test]
  6. path = /cygdrive/c/rsync_test
  7. comment = Rsync Test
  8. auth users = rsync_user
  9. secrets file = /etc/rsyncd.secrets
  10. write only = false
  11. read only = false
  12. list = true
  13.  
  14. [apache_go.chinasoft.com]
  15. path = /cygdrive/c/Users/Administrator/wwwroot/go.chinasoft.com
  16. read only = false
  17. transfer logging = yes
  18. secrets file = /etc/rsyncd.secrets
  19.  
  20. [apache_convert.chinasoft.com]
  21. path = /cygdrive/c/Users/Administrator/wwwroot/convert.chinasoft.com
  22. read only = false
  23. transfer logging = yes
  24. 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服务

  1. 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发布代码的配置

# 拉取代码前,推送代码

  1. #!/bin/bash
  2.  
  3. # 此脚本功能为根据构建时选择的参数,同步 /data/www/vhosts/go.chinasoft.com 下的文件同步到远程中转机器
  4. # 2020.0909 初始化脚本
  5.  
  6. #非apache用户运行脚本,则退出
  7. if [ `whoami` != "apache" ];then
  8. echo "only apache can run me"
  9. exit
  10. fi
  11.  
  12. ## .定义变量
  13. dir_name=bak.$(date +%Y-%m-%d-%H-%M-%S)
  14. project_dir=/data/www/vhosts/go.chinasoft.com
  15.  
  16. ## .备份代码函数
  17. function func_project_backup(){
  18. cp -a $project_dir/ /data/data_backup/go.chinasoft.com_$dir_name
  19. }
  20. func_project_backup
  21.  
  22. ## .判断代码发布目录变量是否为空
  23. if [ ! $project_dir ];then
  24. echo "$project_dir IS NULL ,shell exit!!!!"
  25. exit
  26. fi
  27.  
  28. ## .判断同步状态
  29. function func_rsync_status(){
  30. if [[ $? == || $? == ]];then
  31. rsync_edit=
  32. else
  33. rsync_edit=
  34. echo "`date` 同步到本地目标失败! "
  35. exit
  36. fi
  37. }
  38.  
  39. # 执行编译
  40. cd ${WORKSPACE} && chmod +x ./init.sh && ./init.sh production
  41.  
  42. ## .同步到本地待发路径
  43. function func_rsync_project_local(){
  44. echo "xxxxxxxxxxxxxx同步待发目录开始xxxxxxxxxxxxxxxxxx"
  45. cd $WORKSPACE
  46. /usr/local/bin/rsync -vauP -progress --delete --exclude='.git/' --exclude='.gitignore' --exclude='*.log' $WORKSPACE/ $project_dir/
  47. echo "xxxxxxxxxxxxxx同步待发目录完成xxxxxxxxxxxxxxxxxx"
  48. func_rsync_status
  49. }
  50.  
  51. func_rsync_project_local
    func_rsync_project_local
  52.  
  53. ## 5.推送代码到远程中转机并发布(发布到线上)
  54.  
  55. echo "------------------------------------ rsync start prod -----------------------------------------"
    chown -R apache.users $project_dir/
    sleep 1
  56.  
  57. /bin/bash /usr/local/worksh/jeninks_task/media_io_go.chinasoft.com.sh
    func_rsync_status
  58.  
  59. echo "------------------------------------ rsync done prod -----------------------------------------"
  60.  
  61. ## 7.通过插件执行远程中转机上的同步脚本

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

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

  1. #!/bin/bash
  2. #############################################
  3. ## 设置变量和GET请求过来的变量
  4. ## GET请求传过来的文件所在目录,目录路径写全路径了
  5. #dir=$
  6. passfile="/data/www/.rsync/pass.media_io_win.chinasoft.com"
  7.  
  8. # 非apache用户运行脚本,则退出
  9. if [ `whoami` != "apache" ];then
  10. echo " only apache can run me"
  11. exit
  12. fi
  13.  
  14. # 判断同步状态
  15. function func_rsync_status(){
  16. if [[ $? == || $? == ]];then
  17. rsync_edit=
  18. else
  19. rsync_edit=
  20. echo "`date` 同步到目标失败! "
  21. exit
  22. fi
  23. }
  24.  
  25. # 判断目录是否为空函数
  26. function func_is_empty_dir(){
  27. return `ls -A $|wc -w`
  28. }
  29.  
  30. # 代码发目录
  31. project_dir="/data/www/vhosts/go.chinasoft.com/"
  32.  
  33. # 判断待发目录是否为空,为空则退出
  34. if func_is_empty_dir $project_dir
  35. then
  36. echo " $project_dir is empty , exit!!!!"
  37. exit
  38. else
  39. echo " $project_dir 可以发布"
  40. fi
  41.  
  42. ## 设置变量,目标服务器
  43. server_ip_list="1.1.1.1"
  44.  
  45. # src directory
  46. src_directory="go.chinasoft.com"
  47.  
  48. # dst directory
  49. dst_directory="go.chinasoft.com"
  50.  
  51. exclude_list="--exclude=.svn --exclude=.git --exclude=.gitignore --exclude=*.log --exclude=.gitattributes --exclude=.env"
  52.  
  53. function account_media_io_rsync()
  54. {
  55.  
  56. # rsync ip_list
  57. for ip in ${server_ip_list}
  58. do
  59. echo "####################rsync ${ip} start################################"
  60. rsync -zavP --bwlimit= ${exclude_list} --password-file=${passfile} /data/www/vhosts/${src_directory}/ apache@${ip}::apache_go.chinasoft.com
  61. func_rsync_status
  62. echo "################### rsync ${ip} end #######################"
  63. done
  64. }
  65.  
  66. 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. .net Core 下使用 X509Certificate2 给报文加签

    起因 项目开发中途出现需求需要对接其他公司接口,使用证书进行认证传输,之前在.Net下搞过但是都是对方给我证书 这次需要我生成公钥/私钥,公钥给他这样操作. 生成私钥/公钥(这里是RSA算法,长度规定 ...

  2. vue-cli的安装及版本查看/更新

    vue-cli的安装及版本查看更新 vue-cli安装 npm install vue-cli -g vue-cli的版本查看 vue -V vue-cli的3.0+以后使用的不是vue-cli了,如 ...

  3. JavaScript学习系列博客_14_JavaScript中对象的基本操作

    对象的基本操作 - 创建对象 - 方式一:使用new关键字调用的函数,是构造函数(constructor),构造函数是专门用来创建对象的函数. var obj = new Object(); - 方式 ...

  4. 4 IDEA环境应用

    第4章 IDEA环境应用 spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用M ...

  5. 喵的Unity游戏开发之路 - 轨道摄像机

    前言        很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3 ...

  6. MySQL数据库中查询数据库表、字段总数量,查询数据总量

    最近要查询一些数据库的基本情况,由于以前用oracle数据库比较多,现在换了MySQL数据库,就整理了一部分语句记录下来. 1.查询数据库表数量 #查询MySQL服务中数据库表数据量 SELECT C ...

  7. 操作系统-文件系统(5)Linux文件系统管理

    主流分区机制有MBR和GPT两种 MBR分区:第一个扇区最重要,里面有:引导代码(Bootstrap code area)及分区表(partition table), 其中Bootstrap code ...

  8. 团队作业1——团队展示&选题(银河超级无敌舰队)

    一.团队展示 1.队名: 银河超级无敌舰队 2.队员学号: 姓名 学号 郭奕材(组长) 3118004959 刘婉儿(PM) 3218004994 辜仰淦 3118004957 王煜墉 3118004 ...

  9. classmethod与staticmethod

    1.classmethod   @classmethod # 把一个对象绑定的方法 修改成一个 类方法第一,在方法中仍然可以引用类中的静态变量第二,可以不用实例化对象,就直接用类名在外部调用这个方法什 ...

  10. 牛客网PAT练兵场-旧键盘打字

    题目地址:https://www.nowcoder.com/pat/6/problem/4059 题解:用数组下标标记,直接模拟 /** * *作者:Ycute *时间:2019-12-01-21.3 ...