Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.bat文件到shell的转换,以在Jenkins构建步骤和后期构建步骤之间传递变量_Shell_Powershell_Batch File_Jenkins - Fatal编程技术网

.bat文件到shell的转换,以在Jenkins构建步骤和后期构建步骤之间传递变量

.bat文件到shell的转换,以在Jenkins构建步骤和后期构建步骤之间传递变量,shell,powershell,batch-file,jenkins,Shell,Powershell,Batch File,Jenkins,在我的Jenkins post build email using extended email plugin中,我想使用一个使用EnvInject插件的构建步骤windows批处理中标识的变量。该插件需要使用shell脚本创建属性文件。我在将以下批处理行转换为shell时遇到困难: svn log --limit 1 > Change_Request.txt set "ChangeRequest=" for /f "skip=3 delims=" %%i in (Change_Requ

在我的Jenkins post build email using extended email plugin中,我想使用一个使用EnvInject插件的构建步骤windows批处理中标识的变量。该插件需要使用shell脚本创建属性文件。我在将以下批处理行转换为shell时遇到困难:

svn log --limit 1 > Change_Request.txt

set "ChangeRequest="
for /f "skip=3 delims=" %%i in (Change_Request.txt) do if not defined ChangeRequest set "ChangeRequest=%%i"

echo ChangeRequest=%ChangeRequest% > export.properties

由于没有svn,我无法测试这个,但它可能会工作。 从windows开始,我对shell/bash非常陌生

第一个版本非常相似:

svn log --limit 1 > Change_Request.txt
ChangeRequest=$(sed '4q;d' Change_Request.txt)
echo ChangeRequest=$ChangeRequest>export.properties
短期无风险值:

svn log --limit 1 > Change_Request.txt
echo ChangeRequest=$(sed '2q;d' Change_Request.txt)>export.properties
可能不需要中间文件

echo ChangeRequest=$(svn log --limit 1|sed '4q;d')>export.properties
PowerShell变体


情况:有一个名为EnvInject的Jenkins插件,它允许将变量从构建步骤传递到构建后步骤。未在步骤之间传递变量

当时意识到的问题:在阅读了错误日志消息和关于使用插件的说明后,我认为该插件只适用于shell脚本

真正的问题:我试图从不同的位置读取属性文件,而不是从编写它的位置

解决方案:最初通过使用shell脚本将变量写入属性文件来解决:

echo ChangeRequest=$(svn log --limit 1|sed '4q;d')>export.properties
这解决了问题,因为它在预期位置创建了属性文件

但是,如果我正确地识别了这个问题,它可以在最初的批处理脚本中得到解决

当更新Jenkins作业以传递第二个变量时,我意识到最初努力失败的真正原因。我更新了第一批脚本,将变量传递到预期位置的属性文件。我从存储库目录运行svn命令,然后返回到作业的工作区目录以写入属性文件

svn log --limit 1 > ..\..\..\Change_Request.txt

for /f "skip=3 delims=" %%i in (..\..\..\Change_Request.txt) do if not defined >ChangeRequest set ChangeRequest=%%i

for /f "delims=: tokens=1,2" %%a in ('svn info %Repository_URL%') do (
  if "%%a"=="Revision" (
set /a RevisionNumber=%%b
  )
)

CD D:\Jenkins\workspace\JOB_Folder\

echo ChangeRequest=%ChangeRequest% > export.properties

echo RevisionNumber=%RevisionNumber% >> export.properties

shell是指powershell吗?请在您的问题中直接澄清您所说的shell是什么意思。PowerShell是如何发挥作用的?谢谢Lottings。您的一行解决方案回答了我的问题:echo ChangeRequest=$svn log-limit 1 | sed'4q;出口.物业哇,延迟一个月。如果你能在更短的时间内投赞成票和/或接受我的答案,那就太好了-很抱歉耽搁了这么久。一旦成功了,我就一直跳到下一个需求,然后再跳到下一个需求。下次我会更快地响应。您真的应该阅读,并且输出重定向符号的第一个for中有一个错误。如果未定义,则应为ChangeRequest集ChangeRequest=%%i
svn log --limit 1 > ..\..\..\Change_Request.txt

for /f "skip=3 delims=" %%i in (..\..\..\Change_Request.txt) do if not defined >ChangeRequest set ChangeRequest=%%i

for /f "delims=: tokens=1,2" %%a in ('svn info %Repository_URL%') do (
  if "%%a"=="Revision" (
set /a RevisionNumber=%%b
  )
)

CD D:\Jenkins\workspace\JOB_Folder\

echo ChangeRequest=%ChangeRequest% > export.properties

echo RevisionNumber=%RevisionNumber% >> export.properties