jenkins结合cygwin软件实现从centos发布代码rsync到windows server2019的过程
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的过程的更多相关文章
- Jenkins自动发布代码实战篇
Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...
- 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能
完全国人自主研发原创的智能软件路由器即将发布: 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能 智能软件路由器 BDS 简要介绍 http://kan.weibo.co ...
- jenkins+maven+svn实现简单的一键发布
前言 在安装之前,我想说明一下本文的目的,jenkins的一款持续集成工具, 它可以做的事情很多,其中一个主要的功能就是简化部署流程 回想一下我们的发布流程: ...
- Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)
转载:http://www.cnblogs.com/EasonJim/p/6295372.html Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践) 前提: 这一篇是继上一 ...
- Jenkins实现生产环境部署文件的回滚操作(Windows)
由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...
- 配置Git Extension免密码发布代码到CSDN
配置Git Extension免密码发布代码到CSDN [本文默认大家安装了Git以及Git Extension] 今天花费了许多的时间处理这个问题,希望能给大家节约时间.闲话少说:使用ssh验证来p ...
- CentOS下通过rdesktop连接Windows远程桌面
众所周知,微软的Windows提供了一种远程桌面系统(Remote Desktop),该服务的默认端口是3389,可使用户远程登录进行系统管理或作为终端服务器运行各种应用软件. 而要连接Windows ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
- 在离线环境中发布.NET Core至Windows Server 2008
在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...
随机推荐
- offer收割机也有方法论
秋招的战火就像这夏天的温度一样炙热,陆陆续续很多学弟学妹问我秋招的注意事项,作为温暖型大叔的我此刻必须出场了. 看仔细了,接下来龙叔就把这offer收割机的秘密都告诉你们. 如果你还没点关注的话,记得 ...
- C/C++ 程序反调试的方法
C/C++ 要实现程序反调试有多种方法,BeingDebugged,NtGlobalFlag,ProcessHeap,CheckRemoteDebuggerPresent,STARTUPINFO,Is ...
- linux系统相关参数查询(内存,磁盘,CPU)
1.服务器型号:dmidecode -s system-product-name 出厂日期:dmidecode -s bios-release-date 2.磁盘大小:parted -l 3.物理内存 ...
- pandas 数据表中的字符与日期数据的处理
前面我们有学习过有关字符串的处理和正在表达式,但那都是基于单个字符串或字符串列表的操作.下面将学习如何基于数据框操作字符型变量. 同时介绍一下如何从日期型变量中取出年份,月份,星期几等,如何计算两个日 ...
- 宝塔,一个免费好用的 Linux/Windows 服务器管理面板
宝塔面板是什么? 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率.例如:创建管理网站.FTP.数据库,拥有可视化文件管理器,可视化软件管 ...
- Java数据结构——2-3树
定义2-3树是平衡的3路查找树,其中2(2-node)是指拥有两个分支的节点,3(3-node)是指拥有三个分支的节点.B-树是一种平衡的多路查找树,2-3树属于b-树,其也同样具有B-树的性质,如m ...
- idea Tomcat部署war和war exploded的区别
原文地址:https://blog.csdn.net/linjpg/article/details/73322881 在使用IDEA开发项目时,部署Tomcat的时候通常会出现以下情况: 是选择war ...
- Redis高可用——副本机制
目录 概念 配置 同步方式 起点 主从握手 部分同步 完全同步 执行完全同步判断条件 完全同步代码实现 为实现Redis服务的高可用,Redis官方为我们提供了副本机制(或称主从复制)和哨兵机制.副本 ...
- 手写Promise看着一篇就足够了
目录 概要 博客思路 API的特性与手写源码 构造函数 then catch Promise.resolved Promise.rejected Promise.all Promise.race 概要 ...
- win10安装JDK cmd中可以运行java,但不能用javac,解决方案
win10安装JDK cmd中可以运行java,但不能用javac 网上教程(1)新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_0 ...