我一直在寻找解决这个问题的各种解决方案,我尝试了多个像[1]这样的建议并且没有成功。任务相对简单,我成功地抓住了一场比赛,所以我知道我的正则表达式是正确的。我正在使用我的Jenkins管道脚本中的Groovy
这是问题,我有一个我读过的文件,如下所示
<log><logentry revision="4813"><msg>nvcs-0909 haha nvpl-6700</msg></logentry></log>
我想要做的就是抓住 nvcs-0909 和 nvpl-6700 并将它们作为currentBuild.description放置。我可以做一个,但不能获得多个条目
这是我到目前为止所拥有的
textOfFile = readFile("..\\builds\\$BUILD_NUMBER\\changelog0.xml")
regex = /[Nn][Vv]..[-\s]{1,3}\d+/
allIssues = (textOfFile =~ regex)
当我打印所有问题时,我得到了
java.util.regex.Matcher[pattern=[Nn][Vv]..[-\s]{1,3}\d+ region=0,377 lastmatch=]
我怎样才能让它发挥作用?
我也试过
allIssues = textOfFile.findAll(regex)
那也失败了,但是
allIssues = textOfFile.find(regex)
有效,我得到了我预期的第一场比赛
答案 0 :(得分:0)
工作正常:
def textOfFile = '''<log><logentry revision="4813"><msg>nvcs-0909 haha nvpl-6700</msg></logentry></log>'''
def regex = /[Nn][Vv]..[-\s]{1,3}\d+/
println (textOfFile =~ regex).findAll()
结果:
[nvcs-0909, nvpl-6700]
答案 1 :(得分:0)
所以这个问题是我之前遇到过的问题,但却被隐藏了,因为这次我添加了一个try / catch而不是更早的find方法。目前的代码是
def textOfFile
try {
textOfFile = readFile("..\\builds\\$BUILD_NUMBER\\changelog0.xml")
List<String> allIssues = textOfFile.findAll("[Nn][Vv]..[-\\s]{1,3}\\d+")
issueDescription = ""
for(int i = 0; i < allIssues.size(); i++)
issueDescription += allIssues[i].toUpperCase() + (i < allIssues.size() - 1 ? ", ":"")
currentBuild.description = issueDescription
}
catch(e) {
echo "ERROR"
}
由于我试图围绕世界上发生的事情,我用
打印了错误信息println e.getMessage()
在catch块内,它给出了以下消息
Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods findAll java.lang.String
之前我遇到过此消息并在this的帮助下解决了这个问题。但Jenkins不会给我添加权限的选项,你也不能自己手动添加它们(管理Jenkins - &gt;进程内脚本批准)。
所以我注释了try / catch,运行脚本,让Jenkins捕获异常,并且我可以选择允许我的脚本使用findAll方法。然后我再次运行它并且它完美地工作并重新包装了try / catch中的代码。
我猜测当你的脚本抛出异常并且从不捕获它时,会触发允许你在Jenkins中允许方法权限的通知机制。无论如何它现在工作得很好。