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

时间:2016-12-12 00:59:24

标签: shell powershell batch-file jenkins

在我的Jenkins post构建电子邮件(使用扩展电子邮件插件)中,我想使用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

2 个答案:

答案 0 :(得分:2)

情况:有一个名为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

答案 1 :(得分:1)

没有svn我无法对此进行测试,但它可能会有效。 来自windows我对shell / bash很新。

第一版很相似:

 bulk = symbols.initialize_unordered_bulk_op();
 for i in dataset:
     bulk.find({'name': i}).upsert().update({'$inc': {'freq': 1}})
 try:
    bulk.execute()
 except BulkWriteError as bwe:
    print bwe.details
 con.close()

Shorter no var:

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

PowerShell变体

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