Bat批处理实现Docker下netcore一键发布

背景:VS2017、VS2019,ftp一键发布无效(症状:ftp发布提示发布成功,实际文件未更新,勾选删除原文件可以发布,但是每次都需要全量发布,静态文件夹下保存有图片等其他文件,不能删除)

环境:Linux+Docker,Docker使用外部Ftp共享文件夹

随有了使用批处理实现一键发布的想法

思路:

1.dotnet命令行发布(使用现有的发布配置文件)

2.使用批处理按文件修改时间清理文件(只保留有修改的文件)

3.使用pscp上传到服务器

4.使用plink远程执行shell脚本重启容器

脚本实现如下:

@echo off
@rem ======配置开始Begin==============================
@rem 【待发布项目路径】
set "ProjectPath=%~dp0JXNH.Archives.WebHost.csproj"
@rem 【发布配置文件路径】
set "PublishConfigPath=%~dp0Properties\PublishProfiles\本机发布到文件夹.pubxml"
@rem 【发布文件输出路径】
set "PublishPath=D:\publish\marridb发布\JXNH.Archives\"
@rem 【测试机站点路径】
set "SitePath=/home/JXNH.Archives"
@rem 【需执行shell脚本】
set "ShellCommand=sh /home/dockerscript/jxnh.archivesstart.sh"
set "ServerIP=10.0.0.1"
set "ServerUser=root"
set "ServerPassword=123"
@rem ======配置结束End===============================
echo --------发布站点ing...-------------------
dotnet publish -o %PublishPath% %ProjectPath% /p:PublishProfile=%PublishConfigPath%
echo --------发布成功!----------------------
echo --------清理文件ing...-------------------
@rem 删除配置文件
del /f/s/q %PublishPath%\*.config
@rem 删除pdb文件
del /f/s/q %PublishPath%\*.pdb
@rem 删除3天前的文件
echo y |ForFiles /p %PublishPath% /s /d -3 /c "cmd /c del @file"
echo -------文件清理成功!-------------------------------
TIMEOUT /T 1
echo -------发布到linux测试机ing...-----------------------
.\pscp -pw %ServerPassword% -r %PublishPath% %ServerUser%@%ServerIP%:%SitePath%
echo -------发布到linux测试机成功!---------------------
echo -------执行shell脚本ing...----------------------------
.\plink -no-antispoof -pw %ServerPassword% %ServerUser%@%ServerIP% %ShellCommand%
echo -------shell脚本执行完毕!--------------------------
pause

shell脚本:jxnh.archivesstart.sh

#! /bin/bash
CID=`docker ps -f name=jxnh.archives |awk '{print $1}'|cut -d " " -f 2`
echo "get message:"$CID
if [ "$CID"x = "CONTAINER"x ];
then
 echo "not found container!"
 ACID=`docker ps -a -f name=jxnh.archives |awk '{print $1}'|cut -d " " -f 2`;
 DACID=$(echo $ACID |cut -d " " -f 2);
 docker rm $DACID;
 docker run --privileged -v /home/JXNH.Archives:/app --name jxnh.archives  -p 8010:8010 -d archives /usr/bin/dotnet /app/JXNH.Archives.WebHost.dll;
else
 DDS=$(echo $CID |cut -d " " -f 2)
 echo "get container id is:":$DDS
 docker stop $DDS
 docker rm $DDS
 docker run --privileged -v /home/JXNH.Archives:/app --name jxnh.archives  -p 8010:8010 -d archives /usr/bin/dotnet /app/JXNH.Archives.WebHost.dll
fi

CIDD=`docker ps -f name=jxnh.archives |awk '{print $1}'|cut -d " " -f 2`;
if [ "$CIDD"x = "CONTAINER"x ]
then
 echo "shell script run docker failed!"
else
 echo "run success!"
fi

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据的流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值