我是詹金斯的新手,尽管我发现了一些类似的问题,但是没有一个解决方案似乎对我有用。这对某些人来说可能看起来像是一个基本问题,但对我而言,这是一件非常重要的事情,我正在努力。
基本上,我构建了一个执行Java Selenium代码的项目,该代码在Jenkins'中显示会话ID。控制台输出以及我需要添加到环境变量中的内容,这些变量将在完成此项目后触发的项目中使用。
我尝试了一些Groovy脚本,但我认为我不太了解如何使用它,所以无论我给予什么,都不是我希望得到的。
有没有人做过类似的事情,提供一些如何实现这一目标的技巧?
非常感谢
答案 0 :(得分:2)
有两个选项(理论上,其中一个不起作用,见下文2.)取决于打印是否在您的控制之下。
打印由您控制:
将会话ID写入属性文件,例如from-build-log.properties
:
sessionId=...
添加构建后操作 →Trigger parameterized build on other projects→
此插件触发其他项目的构建,其参数是预定义的,或由完成的构建提供。
每个参数都将传递给目标项目,即使目标未参数化,或者没有定义该名称的属性。
from-build-log.properties
您无法控制
。添加构建后操作 →Post build task→:
此功能允许您根据构建日志输出关联在Hudson上执行某些任务的shell或批处理脚本。如果日志文本与构建日志文件中的某个位置匹配,则将执行该脚本。 [...]
允许使用Java Regex,并且可以将组用作脚本参数。如果文本是“Last Build:#(\ d +)”并且脚本是“script.sh”,那么如果日志包含“Last Build:#4”行,则将调用脚本“script.sh 4”
任务→脚本→:
[...]引用%1,..%n是允许的,并且将被正则表达式匹配的组替换。 %0是整场比赛。
不幸的是,由于2013年以来出现了一个问题:[JENKINS-17268] Post build task plugin: Passing arguments does not work as documented。
,因此无效构建 → 执行Windows批处理命令 →命令:
@echo( & echo CMD: sessionId=123456789
制作后任务 →任务:
sessionId=(\d+)
脚本:
@echo( & echo sessionId='%1'(!) of '%0'
控制台输出:
...
[Freestyle-project] $ cmd /c call C:\Windows\TEMP\hudson4684581005071706054.bat
CMD: sessionId=123456789
C:\Program Files (x86)\Jenkins\workspace\Freestyle-project>exit 0
Performing Post build task...
Match found for :sessionId=(\d+) : True
Logical operation result is TRUE
Running script : @echo( & echo sessionId='%1'(!) of '%0'
[Freestyle-project] $ cmd /c call C:\Windows\TEMP\hudson1525182929053902824.bat
sessionId=''(!) of 'C:\Windows\TEMP\hudson1525182929053902824.bat'
C:\Program Files (x86)\Jenkins\workspace\Freestyle-project>exit 0
POST BUILD TASK : SUCCESS
END OF POST BUILD TASK : 0
Finished: SUCCESS
%0
不是“整个匹配”,而是脚本的名称,与Windows命令行一样。 %1
是空的。
解决方法是:
添加构建步骤 →执行shell →命令:
sed -En 's/.*(sessionId=[0-9]+)/\1/p' \
../../jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log > from-build-log.properties
添加构建后操作 →在其他项目上触发参数化构建
from-build-log.properties