场景
Docker+Jenkins+Pipline实现SpringBoot项目input选择不同差异性yml文件打包、执行sh打包压缩包、使用archiveArtifacts下载制品(jar包、压缩包):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139748758
上面实现打包后台jar包并选择不同的差异性yml文件打包成tar.gz包的过程。
如果使用场景中不需要jenkins,只需要在本机windows电脑上实现git拉取代码-mvn打包jar包-扫描diff目录下不同yml配置文件选项并根据交互输入的选项实现
复制对应的yml文件-打包成tar.gz包的过程。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
Bat中实现git环境变量检测/检测Windows上是否安装git并配置环境变量
新建bat文件并修改内容如下
@echo off
::设置中文编码
chcp 65001
::setlocal和endlocal命令执行结果是让中间的程序对于系统变量的改变只在程序内起作用,不会影响整个系统级别。
setlocal enabledelayedexpansion
::
检查git是否在PATH中
for /f "delims=" %%I in ('git --version')
do set GIT_EXECUTABLE= %%I
:: 如果GIT_EXECUTABLE不为空,则Git已在PATH中
if not defined GIT_EXECUTABLE (
echo Git未安装或环境变量未配置。
echo
--------------------------------------------------------------------
pause
goto :eof
)
echo Git已配置环境变量
echo
--------------------------------------------------------------------
git --version
echo
--------------------------------------------------------------------
endlocal
其中需要注意bat中设置中文编码的位置
chcp 65001不然会输出乱码
其中pause用来表示暂停,输入任何键继续,便于进行提示,然后goto :eof表示退出批处理。
BAT中实现使用Git(已配置环境变量)拉取代码
在上面的基础上实现git pull命令即可
@echo off
::设置中文编码
chcp 65001
::setlocal和endlocal命令执行结果是让中间的程序对于系统变量的改变只在程序内起作用,不会影响整个系统级别。
setlocal enabledelayedexpansion
::
检查git是否在PATH中
for /f "delims=" %%I in ('git --version')
do set GIT_EXECUTABLE= %%I
:: 如果GIT_EXECUTABLE不为空,则Git已在PATH中
if not defined GIT_EXECUTABLE (
echo Git未安装或环境变量未配置。
echo
--------------------------------------------------------------------
pause
goto :eof
)
echo Git已配置环境变量
echo
--------------------------------------------------------------------
git --version
echo
--------------------------------------------------------------------
echo 拉取代码执行git pull 开始
::
执行Git命令,例如:git pull
call git pull
echo 拉取代码执行git pull 结束
echo
--------------------------------------------------------------------
endlocal
BAT中实现检测maven环境变量是否配置
在上面的基础上实现检测maven是否配置环境变量,如果配置则输出maven版本,否则提示并退出批处理
@echo off
::设置中文编码
chcp 65001
::setlocal和endlocal命令执行结果是让中间的程序对于系统变量的改变只在程序内起作用,不会影响整个系统级别。
setlocal enabledelayedexpansion
::
检查git是否在PATH中
for /f "delims=" %%I in ('git --version')
do set GIT_EXECUTABLE= %%I
:: 如果GIT_EXECUTABLE不为空,则Git已在PATH中
if not defined GIT_EXECUTABLE (
echo Git未安装或环境变量未配置。
echo
--------------------------------------------------------------------
pause
goto :eof
)
echo Git已配置环境变量
echo
--------------------------------------------------------------------
git --version
echo
--------------------------------------------------------------------
echo 拉取代码执行git pull 开始
::
执行Git命令,例如:git pull
call git pull
echo 拉取代码执行git pull 结束
echo
--------------------------------------------------------------------
::检查Maven环境变量
if "%MAVEN_HOME%" == ""
(
echo
Maven环境变量MAVEN_HOME未设置,请设置MAVEN_HOME指向Maven安装目录。
pause
::退出批处理
goto :eof
)
:: 检查mvn命令是否可以执行
where mvn >nul
2>nul
if %ERRORLEVEL% NEQ 0 (
echo mvn命令未在系统路径中,请将Maven的bin目录添加到系统环境变量PATH中。
pause
::退出批处理
goto :eof
)
:: 输出Maven版本信息
echo
Maven安装正确配置,版本为:
call mvn --version
echo
--------------------------------------------------------------------
endlocal
BAT中实现使用Maven(已配置环境变量)实现SpringBoot/Maven项目打包成jar包
在上面的基础上添加mvn打包命令即可
@echo off
::设置中文编码
chcp 65001
::setlocal和endlocal命令执行结果是让中间的程序对于系统变量的改变只在程序内起作用,不会影响整个系统级别。
setlocal enabledelayedexpansion
::
检查git是否在PATH中
for /f "delims=" %%I in ('git --version')
do set GIT_EXECUTABLE= %%I
:: 如果GIT_EXECUTABLE不为空,则Git已在PATH中
if not defined GIT_EXECUTABLE (
echo Git未安装或环境变量未配置。
echo
--------------------------------------------------------------------
pause
goto :eof
)
echo Git已配置环境变量
echo
--------------------------------------------------------------------
git --version
echo
--------------------------------------------------------------------
echo 拉取代码执行git pull 开始
::
执行Git命令,例如:git pull
call git pull
echo 拉取代码执行git pull 结束
echo
--------------------------------------------------------------------
::检查Maven环境变量
if "%MAVEN_HOME%" == ""
(
echo
Maven环境变量MAVEN_HOME未设置,请设置MAVEN_HOME指向Maven安装目录。
pause
::退出批处理
goto :eof
)
:: 检查mvn命令是否可以执行
where mvn >nul
2>nul
if %ERRORLEVEL% NEQ 0 (
echo mvn命令未在系统路径中,请将Maven的bin目录添加到系统环境变量PATH中。
pause
::退出批处理
goto :eof
)
:: 输出Maven版本信息
echo
Maven安装正确配置,版本为:
call mvn --version
echo
--------------------------------------------------------------------
echo Maven打包开始
call mvn clean
package -DskipTests
echo Maven打包完成
echo
--------------------------------------------------------------------
endlocal
BAT中实现扫描所有子目录的名称并添加索引/序号到数组并根据交互输入的数字索引选择对应的目录名称
首先在项目根目录下新建diff用来存放各种SpringBoot的差异性yml配置文件
然后bat所在的路径是项目根目录,要实现的效果是扫描diff目录下所有的子目录名称,并添加数字索引标识,然后列出所有的目录名以及数字索引标识,
然后提示用户进行输入,输入正确的索引数据则将目录名进行获取用于后续打包时复制对应目录的差异性文件,如果输入不正确的索引则继续提示输入。
在上面的基础上继续添加如下内容
@echo off
::设置中文编码
chcp 65001
::setlocal和endlocal命令执行结果是让中间的程序对于系统变量的改变只在程序内起作用,不会影响整个系统级别。
setlocal enabledelayedexpansion
::
检查git是否在PATH中
for /f "delims=" %%I in ('git --version')
do set GIT_EXECUTABLE=%%I
:: 如果GIT_EXECUTABLE不为空,则Git已在PATH中
if not defined GIT_EXECUTABLE (
echo Git未安装或环境变量未配置。
echo
--------------------------------------------------------------------
pause
goto :eof
)
echo Git已配置环境变量
echo
--------------------------------------------------------------------
git --version
echo
--------------------------------------------------------------------
echo 拉取代码执行git pull 开始
::
执行Git命令,例如:git pull
call git pull
echo 拉取代码执行git pull 结束
echo
--------------------------------------------------------------------
::检查Maven环境变量
if "%MAVEN_HOME%" == ""
(
echo
Maven环境变量MAVEN_HOME未设置,请设置MAVEN_HOME指向Maven安装目录。
pause
::退出批处理
goto :eof
)
:: 检查mvn命令是否可以执行
where mvn >nul
2>nul
if %ERRORLEVEL% NEQ 0 (
echo mvn命令未在系统路径中,请将Maven的bin目录添加到系统环境变量PATH中。
pause
::退出批处理
goto :eof
)
:: 输出Maven版本信息
echo
Maven安装正确配置,版本为:
call mvn --version
echo
--------------------------------------------------------------------
echo Maven打包开始
call mvn clean
package -DskipTests
echo Maven打包完成
echo
--------------------------------------------------------------------
echo 选择差异性文件开始
echo
--------------------------------------------------------------------
::进入diff目录下
cd diff
:: 初始化变量
set /a dir_index=0
for /d %%i in (*) do (
::
输出序号和子目录名称
echo !dir_index!-%%i
set "dir_names[!dir_index!]=%%i"
:: 每次循环时将计数器增加1。
set /a
dir_index+=1
)
:foundIndex
set /p UserInput=请输入差异化文件前的索引数字:
:: 检查索引是否存在
if defined
dir_names[%UserInput%] (
echo 选择的差异性文件为:
!dir_names[%UserInput%]!
::获取选择的差异性文件目录名称
set "difName=!dir_names[%UserInput%]!"
echo !difName!
) else (
echo
输入的索引数字不存在或格式不正确!!!
goto foundIndex
)
echo 选择差异性文件结束
echo
--------------------------------------------------------------------
endlocal
其中Bat中for循环获取所有目录的子目录名称并且每次循环时数字计数器加1的操作
:: 初始化变量
set /a dir_index=0
for /d %%i in (*) do (
::
输出序号和子目录名称
echo !dir_index!-%%i
set "dir_names[!dir_index!]=%%i"
:: 每次循环时将计数器增加1。
set /a
dir_index+=1
)
上面的in(*)这里的星号代表当前目录下所有,/d代表扫描目录,这里索引变量从0开始,调用索引变量使用双叹号!dir_index!实现,
中间添加一个横线符号,然后调用循环中的每个变量使用%%i
下面set代表声明一个数组,然后索引值为上面声明的索引变量,并将对应索引的值赋值为目录名循环变量。
然后每次循环时将计数器索引变量加1操作。
下面就是打一个锚点为:foundIndex,用来输入不正确的变量时能继续跳转到这里,
然后获取用户的输入并赋值给UserInput
BAT中判断数组中索引是否存在可以通过
if defined dir_names[%UserInput%] (
echo 选择的差异性文件为: !dir_names[%UserInput%]!
::获取选择的差异性文件目录名称
set
"difName=!dir_names[%UserInput%]!"
echo !difName!
)
其中[%UserInput%为用户输入的索引数字,调用添加双百分号。
如果存在则将数组中对应索引的值使用!dir_names[%UserInput%]!获取并赋值给difName,则后续可通过!difName!进行调用输入的索引对应数组的数组值。
BAT中实现判断某目录不存在则创建、遍历目录下所有文件查找以指定后缀名结尾的文件、复制某目录下所有文件到另一个目录下
上面选择了需要打包的差异性文件路径。
需要先创建一个临时目录server,然后将上面maven打包后的jar包复制到该目录下,并将上面选择的差异性文件的目录下的所有文件复制到该目录下
bat中实现判断某文件夹不存在则创建
:: 设置源目录和目标文件夹路径
set
"TARGET_DIR=./server"
:: 创建目标文件夹
if not exist
"%TARGET_DIR%" mkdir "%TARGET_DIR%"
bat中实现遍历目录下所有的文件并复制指定后缀名的文件到某路径下
:: 设置需要复制的文件后缀名
set
"FILE_SUFFIX=.jar"
:: 遍历源目录下的所有文件
for %%f in (*) do
(
:: 检查是否为文件并且后缀名匹配
if
"%%~xf"=="%FILE_SUFFIX%" (
:: 复制文件到目标文件夹
copy "%%f" "%TARGET_DIR%\"
)
)
bat中实现复制某目录下所有文件到另一个目录下
::复制差异文件
xcopy
"../../diff/!difName!" "%TARGET_DIR%" /R /Y
其中TARGET_DIR定义为
set "TARGET_DIR=./server"
这里源路径为相对于bat所在路径的相对目录
注意这里的复制目录时的选项
REM /E 复制目录和子目录,包括空的。
REM
REM /I 如果目标不存在,且复制的是多个文件,则将目录创建为目录。
REM
REM /C 即使出现错误,也会继续复制。
REM
REM /H 复制隐藏和系统文件。
REM
REM /R 复制文件和目录时,设置所有的权限。
REM
REM /Y 覆盖现有的文件而无需提示
BAT中实现调用7ZIP实现将文件/文件夹打包成tar.gz包
Windows中实现将某目录打包成tar.gz包的方式是安装7-zip软件,然后手动将其打包成tar包,
再将这个tar包打包成gzip包。
所以需要先安装7-zip软件,并将7-zip配置添加到环境变量,才能在bat中调用7-zip的压缩命令。
将7z.exe所在的路径添加到环境变量-系统变量下的path中
bat中调用7-zip(已配置环境变量)实现将某目录打包成tar以及tar.gz包
打包成tar包的命令为
echo 开始打包tar包
echo
--------------------------------------------------------------------
:: 创建tar包
7z a "server.tar"
"./server"
echo 打包tar包结束
echo
--------------------------------------------------------------------
其中前面为tar包的名称,后面是要打包的目录,这里是bat所在目录下的server目录
然后将tar包打包成tar.gz包的命令是
:: 创建gzip压缩
7z a -tgzip
"server.tar.gz" "server.tar"
其中前面跟的是打包之后的文件名,后面跟的是要打包的tar包的路径
BAT中实现获取系统日期和时间并按照制定格式截取获取时间戳形如年月日时分秒
上面打包的tar包如果要添加一个时间戳,即获取年月日时分秒的字符串并进行命名,防止文件重名替换
首先需要获取系统当前时间以及格式
echo date=%date%
这里输入的时间字符为
星期 年/月/日
的格式,注意部分系统会输出年/月/日 星期的格式
所以要根据自己系统的格式进行时间戳的截取
时间截取遵从格式 %time:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0)
比如上面的格式进行截取年月日则应该是
echo date=%date%
set
yyyy=%date:~3,4%
set mm=%date:~8,2%
set day=%date:~11,2%
set
yyyymmdd=%yyyy%%mm%%day%
rem 把年月日串中的空格替换为0
set yyyymmdd=%YYYYmmdd: =%
同理截取时间字符的操作为
set hh=%time:~0,2%
::获取分
set mi=%time:~3,2%
::获取秒
::set ss=%time:~6,2%
组合成年月日时分秒的时间戳
::时间截取遵从格式 %time:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0)
echo date=%date%
set
yyyy=%date:~3,4%
set mm=%date:~8,2%
set day=%date:~11,2%
set
yyyymmdd=%yyyy%%mm%%day%
rem 把年月日串中的空格替换为0
set yyyymmdd=%YYYYmmdd: =%
echo
time=%time%
set hh=%time:~0,2%
::获取分
set mi=%time:~3,2%
::获取秒
::set ss=%time:~6,2%
set timestamp=%yyyymmdd%%hh%%mi%
echo
%timestamp%
测试时间戳效果
所以上面添加压缩包时的命令可以修改为
7z a -tgzip "server-!difName!-%timestamp%.tar.gz" "server.tar"
其中!difName!为上面选择的差异性文件的目录名
%timestamp%为当前时间戳
测试bat执行效果
环境变量检测效果
选择差异性文件效果
打包成tar.gz包效果
完整bat脚本资源下载
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/89459123
标签:Maven,set,选择项,echo,------------------------------------------------------------- From: https://www.cnblogs.com/badaoliumangqizhi/p/18258102