首页 > 其他分享 >Bat中实现git和Maven环境变量检测,拉取git代码并打包maven项目,读取子目录差异性yml文件配置并根据选择项调用7zip打包成tar.gz包(获取时间戳截取命名)

Bat中实现git和Maven环境变量检测,拉取git代码并打包maven项目,读取子目录差异性yml文件配置并根据选择项调用7zip打包成tar.gz包(获取时间戳截取命名)

时间:2024-06-20 09:56:16浏览次数:29  
标签:Maven set 选择项 echo -------------------------------------------------------------

场景

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

相关文章

  • 如何修改 Git 远程仓库 URL
    修改Git远程仓库URL是一个常见的操作,特别是在远程仓库地址发生变化时。以下是操作步骤:查看当前远程仓库URL首先,你可以使用gitremote-v查看当前配置的远程仓库URL:gitremote-v运行该命令后,你会看到类似下面的输出,其中origin是默认的远程仓库名称:originhttps:/......
  • .gitignore使用
    .gitignore文件是Git中用于指定应忽略的文件或文件夹的规则列表。正确使用.gitignore可以帮助保持版本库的整洁,避免不必要的文件(如编译产物、日志文件、个人配置文件等)被提交。以下是使用.gitignore的基本步骤:创建.gitignore文件在项目根目录下创建:首先,在你的Git仓库的根目录......
  • git文件上推失败-(non-fast-forward)
    文章目录一、问题描述二、问题原因三、解决方法3.1合并分支(1)通过图形化界面(2)通过命令行3.2解决文件合并冲突一、问题描述在使用git上推时出现下列错误:![rejected]master->master(non-fast-forward)hint:Updateswererejectedbecausethetipofyourcu......
  • Jenkins教程-4-gitlab自动化测试任务构建
    上一小节我们学习了Jenkins构建github自动化测试任务的方法,本小节我们讲解一下公司gitlab自动化测试任务的构建方法。接下来我们以Mac系统为例,讲解一下构建实际自动化测试任务的具体步骤。安装git和gitlab插件点击进入Jenkins插件管理页面安装完插件,http://localhost:8......
  • Gitlab搭建
    目录Gitlab1.使用docker部署gitlab2.登录gitlab2.1修改语言为中文2.3修改密码3.用户管理3.1创建用户4.配置ssh拉取代码4.1添加ssh密钥4.2测试拉取Gitlab1.使用docker部署gitlab[root@master~]#mkdir-p/data/gitlab/{config,logs,data}编写docker-compose.yaml......
  • git开发
    Git初始化两种方式Git全局设置gitconfig--globaluser.name"xx"gitconfig--globaluser.email"[email protected]"克隆仓库[email protected]/xx.git(可以换https)cdSMOKEtouchREADME.mdgitaddREADME.mdgitcommit-m"addREADME"gitpush......
  • Jenkins教程-3-github自动化测试任务构建
    上一小节我们学习了Jenkins在windows和mac系统上安装搭建环境的方法,本小节我们讲解一下Jenkins构建github自动化测试任务的方法。接下来我们以windows系统为例,讲解一下构建实际自动化测试任务的具体步骤。安装git和github插件点击进入Jenkins插件管理页面安装如下插件......
  • Git信息收集
    1.什么是版本控制系统1.1代码的恢复、备份修改仓库难以管理整个工程直接打包,占用空间过多1.2VersionControlSystem1.3发展阶段版本管理本地VCS协同开发文件冲突?自动合并不冲突的内容标记冲突的内容集中化的VCSCVCSCentralizedVersionControl......
  • 细读 Git | 让你弄懂 origin、HEAD、FETCH_HEAD 相关内容
    细读Git|让你弄懂origin、HEAD、FETCH_HEAD相关内容:https://blog.csdn.net/jsxztshaohaibo/article/details/124444377?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-124444377-blog-137666223......
  • DGit介绍
    参考地址:http://githubengineering.com/introducing-dgit/DGit是“DistributedGit”的简写,即分布式Git。众所周知,Git本身就是分布式的,任何的Git仓库备份都是包含该项目所有历史版本的所有的文件,分支,以及提交记录。DGit利用Git的这个特性为每个仓库在三个服务器中保存着三......