在我的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
答案 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